pax_global_header00006660000000000000000000000064143336625750014530gustar00rootroot0000000000000052 comment=520054a9fb45ef48b5b58851449942493c57dace N3.js-1.16.3/000077500000000000000000000000001433366257500125135ustar00rootroot00000000000000N3.js-1.16.3/.babelrc000066400000000000000000000000501433366257500141010ustar00rootroot00000000000000{ presets: [ "@babel/env", ], } N3.js-1.16.3/.browserslistrc000066400000000000000000000000201433366257500155730ustar00rootroot00000000000000node 8 not dead N3.js-1.16.3/.eslintrc000066400000000000000000000105061433366257500143410ustar00rootroot00000000000000{ env: { node: true, es6: true, }, parserOptions: { sourceType: "module", }, rules: { // Possible Errors comma-dangle: [2, "always-multiline"], no-cond-assign: 0, no-console: 2, no-constant-condition: 0, no-debugger: 2, no-dupe-args: 2, no-dupe-keys: 2, no-duplicate-case: 2, no-empty: 2, no-empty-character-class: 2, no-ex-assign: 2, no-extra-boolean-cast: 2, no-extra-parens: 0, no-extra-semi: 2, no-func-assign: 2, no-inner-declarations: 2, no-invalid-regexp: 2, no-irregular-whitespace: 2, no-negated-in-lhs: 2, no-obj-calls: 2, no-regex-spaces: 2, no-sparse-arrays: 2, no-unreachable: 2, use-isnan: 2, valid-jsdoc: 0, valid-typeof: 2, no-unexpected-multiline: 2, // Best Practices accessor-pairs: 2, block-scoped-var: 2, complexity: 0, consistent-return: 0, curly: 0, default-case: 0, dot-notation: 2, dot-location: [2, "property"], eqeqeq: 2, guard-for-in: 0, no-alert: 2, no-caller: 2, no-div-regex: 2, no-else-return: 0, no-labels: 2, no-eq-null: 2, no-eval: 2, no-extend-native: 2, no-extra-bind: 2, no-fallthrough: 0, no-floating-decimal: 2, no-implicit-coercion: 0, no-implied-eval: 2, no-invalid-this: 2, no-iterator: 2, no-lone-blocks: 2, no-loop-func: 2, no-multi-spaces: 0, no-multi-str: 2, no-native-reassign: 2, no-new-func: 2, no-new-wrappers: 2, no-new: 2, no-octal-escape: 2, no-octal: 2, no-param-reassign: 0, no-process-env: 2, no-proto: 2, no-redeclare: 2, no-return-assign: 0, no-script-url: 2, no-self-compare: 2, no-sequences: 0, // allow the comma operator no-throw-literal: 2, no-unused-expressions: 0, no-useless-call: 2, no-void: 2, no-warning-comments: 2, no-with: 2, radix: 2, vars-on-top: 0, wrap-iife: [2, "inside"], yoda: 2, // Strict Mode strict: [2, "never"], // Variables init-declarations: 0, no-catch-shadow: 2, no-delete-var: 2, no-label-var: 2, no-shadow-restricted-names: 2, no-shadow: 0, no-undef-init: 2, no-undef: 2, no-undefined: 0, no-unused-vars: [ 2, { args: "none" }], no-use-before-define: [2, { functions: false, classes: false }], // Node.js callback-return: 0, handle-callback-err: 2, no-mixed-requires: 2, no-new-require: 2, no-path-concat: 2, no-process-exit: 2, no-restricted-modules: 2, no-sync: 2, // Stylistic Issues array-bracket-spacing: 2, arrow-parens: [2, "as-needed"], block-spacing: 2, brace-style: [2, "stroustrup", { allowSingleLine: true }], camelcase: 2, comma-spacing: 2, comma-style: 2, computed-property-spacing: 2, consistent-this: 0, eol-last: 2, func-names: 0, func-style: [2, "declaration"], id-length: 0, id-match: 2, indent-legacy: [2, 2, { VariableDeclarator: 2 }], key-spacing: [2, { mode: "minimum" }], lines-around-comment: 2, linebreak-style: 2, max-nested-callbacks: [2, 1], new-cap: 2, new-parens: 2, newline-after-var: 0, no-array-constructor: 2, no-const-assign: 2, no-continue: 2, no-inline-comments: 0, no-lonely-if: 2, no-mixed-spaces-and-tabs: 2, no-multiple-empty-lines: 0, no-nested-ternary: 0, no-new-object: 2, no-spaced-func: 2, no-ternary: 0, no-trailing-spaces: 2, no-underscore-dangle: 0, no-unneeded-ternary: 2, no-var: 2, object-curly-spacing: [2, "always"], object-curly-newline: 0, object-property-newline: 0, one-var: 0, operator-assignment: 2, operator-linebreak: [2, "after", { overrides: { ":": "ignore" } }], padded-blocks: [2, "never"], prefer-arrow-callback: 2, prefer-const: 2, prefer-template: 2, quote-props: [2, "consistent-as-needed"], quotes: [2, "single", "avoid-escape"], semi-spacing: 2, semi: 2, sort-vars: 0, keyword-spacing: 2, space-before-blocks: 2, space-before-function-paren: [2, {"anonymous": "always", "named": "never"}], space-in-parens: 2, space-infix-ops: 2, space-unary-ops: 2, spaced-comment: [2, "always", { block: { markers: ["!"] } }], template-curly-spacing: 2, wrap-regex: 0, }, } N3.js-1.16.3/.github/000077500000000000000000000000001433366257500140535ustar00rootroot00000000000000N3.js-1.16.3/.github/workflows/000077500000000000000000000000001433366257500161105ustar00rootroot00000000000000N3.js-1.16.3/.github/workflows/ci.yml000066400000000000000000000036201433366257500172270ustar00rootroot00000000000000name: CI on: [push, pull_request] jobs: test: runs-on: ubuntu-latest strategy: matrix: node-version: - 12.x - 14.x - 16.x - 18.x steps: - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@v2 with: node-version: ${{ matrix.node-version }} - uses: actions/checkout@v2 - run: npm ci --ignore-scripts - run: npm run build - run: npm run lint - run: npm run test - run: npm run spec-turtle - run: npm run spec-ntriples - run: npm run spec-nquads - run: npm run spec-trig - run: npx nyc report --reporter=text-lcov > lcov.info - uses: coverallsapp/github-action@master with: github-token: ${{ secrets.github_token }} flag-name: run-${{ matrix.node-version }} parallel: true path-to-lcov: lcov.info 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 docs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - uses: actions/setup-node@v2 with: node-version: 14.x - run: npm ci --ignore-scripts - run: npm run docs - uses: actions/upload-artifact@v2 with: name: docs path: | index.html docs retention-days: 1 gh-pages: needs: - docs - test runs-on: ubuntu-latest if: startsWith(github.ref, 'refs/tags/v') steps: - uses: actions/download-artifact@v2 with: name: docs - uses: peaceiris/actions-gh-pages@v3 with: github_token: ${{ secrets.GITHUB_TOKEN }} publish_dir: . N3.js-1.16.3/.gitignore000066400000000000000000000001061433366257500145000ustar00rootroot00000000000000*.log .nyc_output .rdf-test-suite-cache browser docs lib node_modules N3.js-1.16.3/.mocharc.json000066400000000000000000000001441433366257500150770ustar00rootroot00000000000000{ "require": [ "@babel/register", "test/test-setup" ], "timeout": 100, "slow": 50 } N3.js-1.16.3/.nycrc000066400000000000000000000001511433366257500136270ustar00rootroot00000000000000{ "check-coverage": true, "branches": 100, "functions": 100, "lines": 100, "statements": 100 } N3.js-1.16.3/LICENSE.md000066400000000000000000000021121433366257500141130ustar00rootroot00000000000000# License The MIT License (MIT) Copyright ©2012–present Ruben Verborgh Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. N3.js-1.16.3/README.md000066400000000000000000000404171433366257500140000ustar00rootroot00000000000000# Lightning fast, asynchronous, streaming RDF for JavaScript [![Build Status](https://github.com/rdfjs/N3.js/workflows/CI/badge.svg)](https://github.com/rdfjs/N3.js/actions) [![Coverage Status](https://coveralls.io/repos/github/rdfjs/N3.js/badge.svg)](https://coveralls.io/github/rdfjs/N3.js) [![npm version](https://badge.fury.io/js/n3.svg)](https://www.npmjs.com/package/n3) [![DOI](https://zenodo.org/badge/3058202.svg)](https://zenodo.org/badge/latestdoi/3058202) The N3.js library is an implementation of the [RDF.js low-level specification](http://rdf.js.org/) that lets you handle [RDF](https://www.w3.org/TR/rdf-primer/) in JavaScript easily. It offers: - [**Parsing**](#parsing) triples/quads from [Turtle](https://www.w3.org/TR/turtle/), [TriG](https://www.w3.org/TR/trig/), [N-Triples](https://www.w3.org/TR/n-triples/), [N-Quads](https://www.w3.org/TR/n-quads/), [RDF*](https://blog.liu.se/olafhartig/2019/01/10/position-statement-rdf-star-and-sparql-star/) and [Notation3 (N3)](https://www.w3.org/TeamSubmission/n3/) - [**Writing**](#writing) triples/quads to [Turtle](https://www.w3.org/TR/turtle/), [TriG](https://www.w3.org/TR/trig/), [N-Triples](https://www.w3.org/TR/n-triples/), [N-Quads](https://www.w3.org/TR/n-quads/) and [RDF*](https://blog.liu.se/olafhartig/2019/01/10/position-statement-rdf-star-and-sparql-star/) - [**Storage**](#storing) of triples/quads in memory Parsing and writing is: - 🎛 **asynchronous** – triples arrive as soon as possible - 🚰 **streaming** – streams are parsed as data comes in, so you can parse files larger than memory - ⚡️ **fast** – triples are flying out at high speeds ## Installation For Node.js, N3.js comes as an [npm package](https://npmjs.org/package/n3). ```Bash $ npm install n3 ``` ```JavaScript const N3 = require('n3'); ``` N3.js seamlessly works in browsers via [webpack](https://webpack.js.org/) or [browserify](http://browserify.org/). If you're unfamiliar with these tools, you can read [_webpack: Creating a Bundle – getting started_](https://webpack.js.org/guides/getting-started/#creating-a-bundle) or [_Introduction to browserify_](https://writingjavascript.org/posts/introduction-to-browserify). You will need to create a "UMD bundle" and supply a name (e.g. with the `-s N3` option in browserify). You can also load it via CDN: ```html ``` ## Creating triples/quads N3.js follows the [RDF.js low-level specification](http://rdf.js.org/). `N3.DataFactory` will give you the [factory](http://rdf.js.org/#datafactory-interface) functions to create triples and quads: ```JavaScript const { DataFactory } = N3; const { namedNode, literal, defaultGraph, quad } = DataFactory; const myQuad = quad( namedNode('https://ruben.verborgh.org/profile/#me'), namedNode('http://xmlns.com/foaf/0.1/givenName'), literal('Ruben', 'en'), defaultGraph(), ); console.log(myQuad.termType); // Quad console.log(myQuad.value); // '' console.log(myQuad.subject.value); // https://ruben.verborgh.org/profile/#me console.log(myQuad.object.value); // Ruben console.log(myQuad.object.datatype.value); // http://www.w3.org/1999/02/22-rdf-syntax-ns#langString console.log(myQuad.object.language); // en ``` In the rest of this document, we will treat “triples” and “quads” equally: we assume that a quad is simply a triple in a named or default graph. ## Parsing ### From an RDF document to quads `N3.Parser` transforms Turtle, TriG, N-Triples, or N-Quads document into quads through a callback: ```JavaScript const parser = new N3.Parser(); parser.parse( `PREFIX c: c:Tom a c:Cat. c:Jerry a c:Mouse; c:smarterThan c:Tom.`, (error, quad, prefixes) => { if (quad) console.log(quad); else console.log("# That's all, folks!", prefixes); }); ``` The callback's first argument is an optional error value, the second is a quad. If there are no more quads, the callback is invoked one last time with `null` for `quad` and a hash of prefixes as third argument.
Pass a second callback to `parse` to retrieve prefixes as they are read.
If no callbacks are provided, parsing happens synchronously. By default, `N3.Parser` parses a permissive superset of Turtle, TriG, N-Triples, and N-Quads.
For strict compatibility with any of those languages, pass a `format` argument upon creation: ```JavaScript const parser1 = new N3.Parser({ format: 'N-Triples' }); const parser2 = new N3.Parser({ format: 'application/trig' }); ``` Notation3 (N3) is supported _only_ through the `format` argument: ```JavaScript const parser3 = new N3.Parser({ format: 'N3' }); const parser4 = new N3.Parser({ format: 'Notation3' }); const parser5 = new N3.Parser({ format: 'text/n3' }); ``` It is possible to provide the base IRI of the document that you want to parse. This is done by passing a `baseIRI` argument upon creation: ```JavaScript const parser = new N3.Parser({ baseIRI: 'http://example.org/' }); ``` By default, `N3.Parser` will prefix blank node labels with a `b{digit}_` prefix. This is done to prevent collisions of unrelated blank nodes having identical labels. The `blankNodePrefix` constructor argument can be used to modify the prefix or, if set to an empty string, completely disable prefixing: ```JavaScript const parser = new N3.Parser({ blankNodePrefix: '' }); ``` ### From an RDF stream to quads `N3.Parser` can parse [Node.js streams](http://nodejs.org/api/stream.html) as they grow, returning quads as soon as they're ready. ```JavaScript const parser = new N3.Parser(), rdfStream = fs.createReadStream('cartoons.ttl'); parser.parse(rdfStream, console.log); ``` `N3.StreamParser` is a [Node.js stream](http://nodejs.org/api/stream.html) and [RDF.js Sink](http://rdf.js.org/#sink-interface) implementation. This solution is ideal if your consumer is slower, since source data is only read when the consumer is ready. ```JavaScript const streamParser = new N3.StreamParser(), rdfStream = fs.createReadStream('cartoons.ttl'); rdfStream.pipe(streamParser); streamParser.pipe(new SlowConsumer()); function SlowConsumer() { const writer = new require('stream').Writable({ objectMode: true }); writer._write = (quad, encoding, done) => { console.log(quad); setTimeout(done, 1000); }; return writer; } ``` A dedicated `prefix` event signals every prefix with `prefix` and `term` arguments. ## Writing ### From quads to a string `N3.Writer` serializes quads as an RDF document. Write quads through `addQuad`. ```JavaScript const writer = new N3.Writer({ prefixes: { c: 'http://example.org/cartoons#' } }); writer.addQuad( namedNode('http://example.org/cartoons#Tom'), namedNode('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), namedNode('http://example.org/cartoons#Cat') ); writer.addQuad(quad( namedNode('http://example.org/cartoons#Tom'), namedNode('http://example.org/cartoons#name'), literal('Tom') )); writer.end((error, result) => console.log(result)); ``` By default, `N3.Writer` writes Turtle (or TriG if some quads are in a named graph).
To write N-Triples (or N-Quads) instead, pass a `format` argument upon creation: ```JavaScript const writer1 = new N3.Writer({ format: 'N-Triples' }); const writer2 = new N3.Writer({ format: 'application/trig' }); ``` ### From quads to an RDF stream `N3.Writer` can also write quads to a Node.js stream. ```JavaScript const writer = new N3.Writer(process.stdout, { end: false, prefixes: { c: 'http://example.org/cartoons#' } }); writer.addQuad( namedNode('http://example.org/cartoons#Tom'), namedNode('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), namedNode('http://example.org/cartoons#Cat') ); writer.addQuad(quad( namedNode('http://example.org/cartoons#Tom'), namedNode('http://example.org/cartoons#name'), literal('Tom') )); writer.end(); ``` ### From a quad stream to an RDF stream `N3.StreamWriter` is a [Node.js stream](http://nodejs.org/api/stream.html) and [RDF.js Sink](http://rdf.js.org/#sink-interface) implementation. ```JavaScript const streamParser = new N3.StreamParser(), inputStream = fs.createReadStream('cartoons.ttl'), streamWriter = new N3.StreamWriter({ prefixes: { c: 'http://example.org/cartoons#' } }); inputStream.pipe(streamParser); streamParser.pipe(streamWriter); streamWriter.pipe(process.stdout); ``` ### Blank nodes and lists You might want to use the `[…]` and list `(…)` notations of Turtle and TriG. However, a streaming writer cannot create these automatically: the shorthand notations are only possible if blank nodes or list heads are not used later on, which can only be determined conclusively at the end of the stream. The `blank` and `list` functions allow you to create them manually instead: ```JavaScript const writer = new N3.Writer({ prefixes: { c: 'http://example.org/cartoons#', foaf: 'http://xmlns.com/foaf/0.1/' } }); writer.addQuad( writer.blank( namedNode('http://xmlns.com/foaf/0.1/givenName'), literal('Tom', 'en')), namedNode('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), namedNode('http://example.org/cartoons#Cat') ); writer.addQuad(quad( namedNode('http://example.org/cartoons#Jerry'), namedNode('http://xmlns.com/foaf/0.1/knows'), writer.blank([{ predicate: namedNode('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), object: namedNode('http://example.org/cartoons#Cat'), },{ predicate: namedNode('http://xmlns.com/foaf/0.1/givenName'), object: literal('Tom', 'en'), }]) )); writer.addQuad( namedNode('http://example.org/cartoons#Mammy'), namedNode('http://example.org/cartoons#hasPets'), writer.list([ namedNode('http://example.org/cartoons#Tom'), namedNode('http://example.org/cartoons#Jerry'), ]) ); writer.end((error, result) => console.log(result)); ``` ## Storing `N3.Store` allows you to store triples in memory and find them fast. In this example, we create a new store and add the triples `:Pluto a :Dog.` and `:Mickey a :Mouse`.
Then, we find triples with `:Mickey` as subject. ```JavaScript const store = new N3.Store(); store.add( namedNode('http://ex.org/Pluto'), namedNode('http://ex.org/type'), namedNode('http://ex.org/Dog') ); store.add( namedNode('http://ex.org/Mickey'), namedNode('http://ex.org/type'), namedNode('http://ex.org/Mouse') ); // Retrieve all quads for (const quad of store) console.log(quad); // Retrieve Mickey's quads for (const quad of store.match(namedNode('http://ex.org/Mickey'), null, null)) console.log(quad); ``` ### [`DatasetCore` Interface](https://rdf.js.org/dataset-spec/#datasetcore-interface) This store adheres to the `DatasetCore` interface which exposes the following properties Attributes: - `size` — A non-negative integer that specifies the number of quads in the set. Methods: - `add` — Adds the specified quad to the dataset. Existing quads, as defined in `Quad.equals`, will be ignored. - `delete` — Removes the specified quad from the dataset. - `has` — Determines whether a dataset includes a certain quad. - `match` — Returns a new dataset that is comprised of all quads in the current instance matching the given arguments. - `[Symbol.iterator]` — Implements the iterator protocol to allow iteration over all `quads` in the dataset as in the example above. ### Addition and deletion of quads The store provides the following manipulation methods in addition to implementing the standard [`DatasetCore` Interface](https://rdf.js.org/dataset-spec/#datasetcore-interface) ([documentation](http://rdfjs.github.io/N3.js/docs/N3Store.html)): - `addQuad` to insert one quad - `addQuads` to insert an array of quads - `removeQuad` to remove one quad - `removeQuads` to remove an array of quads - `remove` to remove a stream of quads - `removeMatches` to remove all quads matching the given pattern - `deleteGraph` to remove all quads with the given graph - `createBlankNode` returns an unused blank node identifier ### Searching quads or entities The store provides the following search methods ([documentation](http://rdfjs.github.io/N3.js/docs/N3Store.html)): - `readQuads` returns a generator of quads matching the given pattern - `getQuads` returns an array of quads matching the given pattern - `match` returns a stream of quads matching the given pattern - `countQuads` counts the number of quads matching the given pattern - `forEach` executes a callback on all matching quads - `every` returns whether a callback on matching quads always returns true - `some` returns whether a callback on matching quads returns true at least once - `getSubjects` returns an array of unique subjects occurring in matching quads - `forSubjects` executes a callback on unique subjects occurring in matching quads - `getPredicates` returns an array of unique predicates occurring in matching quad - `forPredicates` executes a callback on unique predicates occurring in matching quads - `getObjects` returns an array of unique objects occurring in matching quad - `forObjects` executes a callback on unique objects occurring in matching quads - `getGraphs` returns an array of unique graphs occurring in matching quad - `forGraphs` executes a callback on unique graphs occurring in matching quads ## Compatibility ### Format specifications The N3.js parser and writer is fully compatible with the following W3C specifications: - [RDF 1.1 Turtle](https://www.w3.org/TR/turtle/) – [EARL report](https://raw.githubusercontent.com/rdfjs/N3.js/earl/n3js-earl-report-turtle.ttl) - [RDF 1.1 TriG](https://www.w3.org/TR/trig/) – [EARL report](https://raw.githubusercontent.com/rdfjs/N3.js/earl/n3js-earl-report-trig.ttl) - [RDF 1.1 N-Triples](https://www.w3.org/TR/n-triples/) – [EARL report](https://raw.githubusercontent.com/rdfjs/N3.js/earl/n3js-earl-report-ntriples.ttl) - [RDF 1.1 N-Quads](https://www.w3.org/TR/n-quads/) – [EARL report](https://raw.githubusercontent.com/rdfjs/N3.js/earl/n3js-earl-report-nquads.ttl) In addition, the N3.js parser also supports [Notation3 (N3)](https://www.w3.org/TeamSubmission/n3/) (no official specification yet). The N3.js parser and writer are also fully compatible with the RDF* variants of the W3C specifications. The default mode is permissive and allows a mixture of different syntaxes, including RDF*. Pass a `format` option to the constructor with the name or MIME type of a format for strict, fault-intolerant behavior. If a format string contains `star` or `*` (e.g., `turtlestar` or `TriG*`), RDF* support for that format will be enabled. ### Interface specifications The N3.js submodules are compatible with the following [RDF.js](http://rdf.js.org) interfaces: - `N3.DataFactory` implements [`DataFactory`](http://rdf.js.org/data-model-spec/#datafactory-interface) - the terms it creates implement [`Term`](http://rdf.js.org/data-model-spec/#term-interface) and one of [`NamedNode`](http://rdf.js.org/data-model-spec/#namednode-interface), [`BlankNode`](http://rdf.js.org/data-model-spec/#blanknode-interface), [`Literal`](http://rdf.js.org/data-model-spec/#literal-interface), [`Variable`](http://rdf.js.org/data-model-spec/#variable-interface), [`DefaultGraph`](http://rdf.js.org/data-model-spec/#defaultgraph-interface) - the triples/quads it creates implement [`Term`](http://rdf.js.org/data-model-spec/#term-interface), [`Triple`](http://rdf.js.org/data-model-spec/#triple-interface) and [`Quad`](http://rdf.js.org/data-model-spec/#quad-interface) - `N3.StreamParser` implements [`Stream`](http://rdf.js.org/stream-spec/#stream-interface) and [`Sink`](http://rdf.js.org/stream-spec/#sink-interface) - `N3.StreamWriter` implements [`Stream`](http://rdf.js.org/stream-spec/#stream-interface) and [`Sink`](http://rdf.js.org/stream-spec/#sink-interface) - `N3.Store` implements [`Store`](http://rdf.js.org/stream-spec/#store-interface) [`Source`](http://rdf.js.org/stream-spec/#source-interface) [`Sink`](http://rdf.js.org/stream-spec/#sink-interface) [`DatasetCore`](https://rdf.js.org/dataset-spec/#datasetcore-interface) ## License and contributions The N3.js library is copyrighted by [Ruben Verborgh](https://ruben.verborgh.org/) and released under the [MIT License](https://github.com/rdfjs/N3.js/blob/master/LICENSE.md). Contributions are welcome, and bug reports or pull requests are always helpful. If you plan to implement a larger feature, it's best to contact me first. N3.js-1.16.3/index.html000066400000000000000000000013011433366257500145030ustar00rootroot00000000000000 N3.js Documentation

N3.js Documentation

N3.js-1.16.3/package-lock.json000066400000000000000000021134631433366257500157410ustar00rootroot00000000000000{ "name": "n3", "version": "1.16.3", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "n3", "version": "1.16.3", "license": "MIT", "dependencies": { "queue-microtask": "^1.1.2", "readable-stream": "^4.0.0" }, "devDependencies": { "@babel/cli": "^7.16.0", "@babel/core": "^7.16.0", "@babel/preset-env": "^7.16.0", "@babel/register": "^7.16.0", "arrayify-stream": "^1.0.0", "browserify": "^17.0.0", "chai": "^4.0.2", "chai-things": "^0.2.0", "colors": "^1.1.2", "docco": "^0.8.0", "eslint": "^5.14.1", "mocha": "^8.0.0", "nyc": "^14.1.1", "pre-commit": "^1.2.2", "rdf-test-suite": "^1.19.2", "streamify-string": "^1.0.1", "uglify-js": "^3.14.3" }, "engines": { "node": ">=12.0" } }, "node_modules/@babel/cli": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.16.0.tgz", "integrity": "sha512-WLrM42vKX/4atIoQB+eb0ovUof53UUvecb4qGjU2PDDWRiZr50ZpiV8NpcLo7iSxeGYrRG0Mqembsa+UrTAV6Q==", "dev": true, "dependencies": { "commander": "^4.0.1", "convert-source-map": "^1.1.0", "fs-readdir-recursive": "^1.1.0", "glob": "^7.0.0", "make-dir": "^2.1.0", "slash": "^2.0.0", "source-map": "^0.5.0" }, "bin": { "babel": "bin/babel.js", "babel-external-helpers": "bin/babel-external-helpers.js" }, "engines": { "node": ">=6.9.0" }, "optionalDependencies": { "@nicolo-ribaudo/chokidar-2": "2.1.8-no-fsevents.3", "chokidar": "^3.4.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/code-frame": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.0.tgz", "integrity": "sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA==", "dev": true, "dependencies": { "@babel/highlight": "^7.16.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/compat-data": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.16.0.tgz", "integrity": "sha512-DGjt2QZse5SGd9nfOSqO4WLJ8NN/oHkijbXbPrxuoJO3oIPJL3TciZs9FX+cOHNiY9E9l0opL8g7BmLe3T+9ew==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.16.0.tgz", "integrity": "sha512-mYZEvshBRHGsIAiyH5PzCFTCfbWfoYbO/jcSdXQSUQu1/pW0xDZAUP7KEc32heqWTAfAHhV9j1vH8Sav7l+JNQ==", "dev": true, "dependencies": { "@babel/code-frame": "^7.16.0", "@babel/generator": "^7.16.0", "@babel/helper-compilation-targets": "^7.16.0", "@babel/helper-module-transforms": "^7.16.0", "@babel/helpers": "^7.16.0", "@babel/parser": "^7.16.0", "@babel/template": "^7.16.0", "@babel/traverse": "^7.16.0", "@babel/types": "^7.16.0", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.1.2", "semver": "^6.3.0", "source-map": "^0.5.0" }, "engines": { "node": ">=6.9.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/babel" } }, "node_modules/@babel/core/node_modules/debug": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", "dev": true, "dependencies": { "ms": "2.1.2" }, "engines": { "node": ">=6.0" }, "peerDependenciesMeta": { "supports-color": { "optional": true } } }, "node_modules/@babel/core/node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, "node_modules/@babel/core/node_modules/semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true, "bin": { "semver": "bin/semver.js" } }, "node_modules/@babel/generator": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.0.tgz", "integrity": "sha512-RR8hUCfRQn9j9RPKEVXo9LiwoxLPYn6hNZlvUOR8tSnaxlD0p0+la00ZP9/SnRt6HchKr+X0fO2r8vrETiJGew==", "dev": true, "dependencies": { "@babel/types": "^7.16.0", "jsesc": "^2.5.1", "source-map": "^0.5.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-annotate-as-pure": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.0.tgz", "integrity": "sha512-ItmYF9vR4zA8cByDocY05o0LGUkp1zhbTQOH1NFyl5xXEqlTJQCEJjieriw+aFpxo16swMxUnUiKS7a/r4vtHg==", "dev": true, "dependencies": { "@babel/types": "^7.16.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.0.tgz", "integrity": "sha512-9KuleLT0e77wFUku6TUkqZzCEymBdtuQQ27MhEKzf9UOOJu3cYj98kyaDAzxpC7lV6DGiZFuC8XqDsq8/Kl6aQ==", "dev": true, "dependencies": { "@babel/helper-explode-assignable-expression": "^7.16.0", "@babel/types": "^7.16.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-compilation-targets": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.0.tgz", "integrity": "sha512-S7iaOT1SYlqK0sQaCi21RX4+13hmdmnxIEAnQUB/eh7GeAnRjOUgTYpLkUOiRXzD+yog1JxP0qyAQZ7ZxVxLVg==", "dev": true, "dependencies": { "@babel/compat-data": "^7.16.0", "@babel/helper-validator-option": "^7.14.5", "browserslist": "^4.16.6", "semver": "^6.3.0" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "node_modules/@babel/helper-compilation-targets/node_modules/semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true, "bin": { "semver": "bin/semver.js" } }, "node_modules/@babel/helper-create-class-features-plugin": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.16.0.tgz", "integrity": "sha512-XLwWvqEaq19zFlF5PTgOod4bUA+XbkR4WLQBct1bkzmxJGB0ZEJaoKF4c8cgH9oBtCDuYJ8BP5NB9uFiEgO5QA==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.16.0", "@babel/helper-function-name": "^7.16.0", "@babel/helper-member-expression-to-functions": "^7.16.0", "@babel/helper-optimise-call-expression": "^7.16.0", "@babel/helper-replace-supers": "^7.16.0", "@babel/helper-split-export-declaration": "^7.16.0" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "node_modules/@babel/helper-create-regexp-features-plugin": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.16.0.tgz", "integrity": "sha512-3DyG0zAFAZKcOp7aVr33ddwkxJ0Z0Jr5V99y3I690eYLpukJsJvAbzTy1ewoCqsML8SbIrjH14Jc/nSQ4TvNPA==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.16.0", "regexpu-core": "^4.7.1" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "node_modules/@babel/helper-define-polyfill-provider": { "version": "0.2.4", "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.4.tgz", "integrity": "sha512-OrpPZ97s+aPi6h2n1OXzdhVis1SGSsMU2aMHgLcOKfsp4/v1NWpx3CWT3lBj5eeBq9cDkPkh+YCfdF7O12uNDQ==", "dev": true, "dependencies": { "@babel/helper-compilation-targets": "^7.13.0", "@babel/helper-module-imports": "^7.12.13", "@babel/helper-plugin-utils": "^7.13.0", "@babel/traverse": "^7.13.0", "debug": "^4.1.1", "lodash.debounce": "^4.0.8", "resolve": "^1.14.2", "semver": "^6.1.2" }, "peerDependencies": { "@babel/core": "^7.4.0-0" } }, "node_modules/@babel/helper-define-polyfill-provider/node_modules/debug": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", "dev": true, "dependencies": { "ms": "2.1.2" }, "engines": { "node": ">=6.0" }, "peerDependenciesMeta": { "supports-color": { "optional": true } } }, "node_modules/@babel/helper-define-polyfill-provider/node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, "node_modules/@babel/helper-define-polyfill-provider/node_modules/semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true, "bin": { "semver": "bin/semver.js" } }, "node_modules/@babel/helper-explode-assignable-expression": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.0.tgz", "integrity": "sha512-Hk2SLxC9ZbcOhLpg/yMznzJ11W++lg5GMbxt1ev6TXUiJB0N42KPC+7w8a+eWGuqDnUYuwStJoZHM7RgmIOaGQ==", "dev": true, "dependencies": { "@babel/types": "^7.16.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-function-name": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.0.tgz", "integrity": "sha512-BZh4mEk1xi2h4HFjWUXRQX5AEx4rvaZxHgax9gcjdLWdkjsY7MKt5p0otjsg5noXw+pB+clMCjw+aEVYADMjog==", "dev": true, "dependencies": { "@babel/helper-get-function-arity": "^7.16.0", "@babel/template": "^7.16.0", "@babel/types": "^7.16.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-get-function-arity": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.0.tgz", "integrity": "sha512-ASCquNcywC1NkYh/z7Cgp3w31YW8aojjYIlNg4VeJiHkqyP4AzIvr4qx7pYDb4/s8YcsZWqqOSxgkvjUz1kpDQ==", "dev": true, "dependencies": { "@babel/types": "^7.16.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-hoist-variables": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.0.tgz", "integrity": "sha512-1AZlpazjUR0EQZQv3sgRNfM9mEVWPK3M6vlalczA+EECcPz3XPh6VplbErL5UoMpChhSck5wAJHthlj1bYpcmg==", "dev": true, "dependencies": { "@babel/types": "^7.16.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-member-expression-to-functions": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.0.tgz", "integrity": "sha512-bsjlBFPuWT6IWhl28EdrQ+gTvSvj5tqVP5Xeftp07SEuz5pLnsXZuDkDD3Rfcxy0IsHmbZ+7B2/9SHzxO0T+sQ==", "dev": true, "dependencies": { "@babel/types": "^7.16.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.0.tgz", "integrity": "sha512-kkH7sWzKPq0xt3H1n+ghb4xEMP8k0U7XV3kkB+ZGy69kDk2ySFW1qPi06sjKzFY3t1j6XbJSqr4mF9L7CYVyhg==", "dev": true, "dependencies": { "@babel/types": "^7.16.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.0.tgz", "integrity": "sha512-My4cr9ATcaBbmaEa8M0dZNA74cfI6gitvUAskgDtAFmAqyFKDSHQo5YstxPbN+lzHl2D9l/YOEFqb2mtUh4gfA==", "dev": true, "dependencies": { "@babel/helper-module-imports": "^7.16.0", "@babel/helper-replace-supers": "^7.16.0", "@babel/helper-simple-access": "^7.16.0", "@babel/helper-split-export-declaration": "^7.16.0", "@babel/helper-validator-identifier": "^7.15.7", "@babel/template": "^7.16.0", "@babel/traverse": "^7.16.0", "@babel/types": "^7.16.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-optimise-call-expression": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.0.tgz", "integrity": "sha512-SuI467Gi2V8fkofm2JPnZzB/SUuXoJA5zXe/xzyPP2M04686RzFKFHPK6HDVN6JvWBIEW8tt9hPR7fXdn2Lgpw==", "dev": true, "dependencies": { "@babel/types": "^7.16.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-plugin-utils": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-remap-async-to-generator": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.0.tgz", "integrity": "sha512-MLM1IOMe9aQBqMWxcRw8dcb9jlM86NIw7KA0Wri91Xkfied+dE0QuBFSBjMNvqzmS0OSIDsMNC24dBEkPUi7ew==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.16.0", "@babel/helper-wrap-function": "^7.16.0", "@babel/types": "^7.16.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-replace-supers": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.0.tgz", "integrity": "sha512-TQxuQfSCdoha7cpRNJvfaYxxxzmbxXw/+6cS7V02eeDYyhxderSoMVALvwupA54/pZcOTtVeJ0xccp1nGWladA==", "dev": true, "dependencies": { "@babel/helper-member-expression-to-functions": "^7.16.0", "@babel/helper-optimise-call-expression": "^7.16.0", "@babel/traverse": "^7.16.0", "@babel/types": "^7.16.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-simple-access": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.0.tgz", "integrity": "sha512-o1rjBT/gppAqKsYfUdfHq5Rk03lMQrkPHG1OWzHWpLgVXRH4HnMM9Et9CVdIqwkCQlobnGHEJMsgWP/jE1zUiw==", "dev": true, "dependencies": { "@babel/types": "^7.16.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-skip-transparent-expression-wrappers": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz", "integrity": "sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw==", "dev": true, "dependencies": { "@babel/types": "^7.16.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-split-export-declaration": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.0.tgz", "integrity": "sha512-0YMMRpuDFNGTHNRiiqJX19GjNXA4H0E8jZ2ibccfSxaCogbm3am5WN/2nQNj0YnQwGWM1J06GOcQ2qnh3+0paw==", "dev": true, "dependencies": { "@babel/types": "^7.16.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { "version": "7.15.7", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz", "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-wrap-function": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.16.0.tgz", "integrity": "sha512-VVMGzYY3vkWgCJML+qVLvGIam902mJW0FvT7Avj1zEe0Gn7D93aWdLblYARTxEw+6DhZmtzhBM2zv0ekE5zg1g==", "dev": true, "dependencies": { "@babel/helper-function-name": "^7.16.0", "@babel/template": "^7.16.0", "@babel/traverse": "^7.16.0", "@babel/types": "^7.16.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.16.0.tgz", "integrity": "sha512-dVRM0StFMdKlkt7cVcGgwD8UMaBfWJHl3A83Yfs8GQ3MO0LHIIIMvK7Fa0RGOGUQ10qikLaX6D7o5htcQWgTMQ==", "dev": true, "dependencies": { "@babel/template": "^7.16.0", "@babel/traverse": "^7.16.0", "@babel/types": "^7.16.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.0.tgz", "integrity": "sha512-t8MH41kUQylBtu2+4IQA3atqevA2lRgqA2wyVB/YiWmsDSuylZZuXOUy9ric30hfzauEFfdsuk/eXTRrGrfd0g==", "dev": true, "dependencies": { "@babel/helper-validator-identifier": "^7.15.7", "chalk": "^2.0.0", "js-tokens": "^4.0.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { "version": "7.16.2", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.2.tgz", "integrity": "sha512-RUVpT0G2h6rOZwqLDTrKk7ksNv7YpAilTnYe1/Q+eDjxEceRMKVWbCsX7t8h6C1qCFi/1Y8WZjcEPBAFG27GPw==", "dev": true, "bin": { "parser": "bin/babel-parser.js" }, "engines": { "node": ">=6.0.0" } }, "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { "version": "7.16.2", "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.16.2.tgz", "integrity": "sha512-h37CvpLSf8gb2lIJ2CgC3t+EjFbi0t8qS7LCS1xcJIlEXE4czlofwaW7W1HA8zpgOCzI9C1nmoqNR1zWkk0pQg==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.16.0.tgz", "integrity": "sha512-4tcFwwicpWTrpl9qjf7UsoosaArgImF85AxqCRZlgc3IQDvkUHjJpruXAL58Wmj+T6fypWTC/BakfEkwIL/pwA==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.14.5", "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", "@babel/plugin-proposal-optional-chaining": "^7.16.0" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.13.0" } }, "node_modules/@babel/plugin-proposal-async-generator-functions": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.0.tgz", "integrity": "sha512-nyYmIo7ZqKsY6P4lnVmBlxp9B3a96CscbLotlsNuktMHahkDwoPYEjXrZHU0Tj844Z9f1IthVxQln57mhkcExw==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.14.5", "@babel/helper-remap-async-to-generator": "^7.16.0", "@babel/plugin-syntax-async-generators": "^7.8.4" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-proposal-class-properties": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.0.tgz", "integrity": "sha512-mCF3HcuZSY9Fcx56Lbn+CGdT44ioBMMvjNVldpKtj8tpniETdLjnxdHI1+sDWXIM1nNt+EanJOZ3IG9lzVjs7A==", "dev": true, "dependencies": { "@babel/helper-create-class-features-plugin": "^7.16.0", "@babel/helper-plugin-utils": "^7.14.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-proposal-class-static-block": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.16.0.tgz", "integrity": "sha512-mAy3sdcY9sKAkf3lQbDiv3olOfiLqI51c9DR9b19uMoR2Z6r5pmGl7dfNFqEvqOyqbf1ta4lknK4gc5PJn3mfA==", "dev": true, "dependencies": { "@babel/helper-create-class-features-plugin": "^7.16.0", "@babel/helper-plugin-utils": "^7.14.5", "@babel/plugin-syntax-class-static-block": "^7.14.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.12.0" } }, "node_modules/@babel/plugin-proposal-dynamic-import": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.0.tgz", "integrity": "sha512-QGSA6ExWk95jFQgwz5GQ2Dr95cf7eI7TKutIXXTb7B1gCLTCz5hTjFTQGfLFBBiC5WSNi7udNwWsqbbMh1c4yQ==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.14.5", "@babel/plugin-syntax-dynamic-import": "^7.8.3" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-proposal-export-namespace-from": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.16.0.tgz", "integrity": "sha512-CjI4nxM/D+5wCnhD11MHB1AwRSAYeDT+h8gCdcVJZ/OK7+wRzFsf7PFPWVpVpNRkHMmMkQWAHpTq+15IXQ1diA==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.14.5", "@babel/plugin-syntax-export-namespace-from": "^7.8.3" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-proposal-json-strings": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.16.0.tgz", "integrity": "sha512-kouIPuiv8mSi5JkEhzApg5Gn6hFyKPnlkO0a9YSzqRurH8wYzSlf6RJdzluAsbqecdW5pBvDJDfyDIUR/vLxvg==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.14.5", "@babel/plugin-syntax-json-strings": "^7.8.3" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-proposal-logical-assignment-operators": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.16.0.tgz", "integrity": "sha512-pbW0fE30sVTYXXm9lpVQQ/Vc+iTeQKiXlaNRZPPN2A2VdlWyAtsUrsQ3xydSlDW00TFMK7a8m3cDTkBF5WnV3Q==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.14.5", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.0.tgz", "integrity": "sha512-3bnHA8CAFm7cG93v8loghDYyQ8r97Qydf63BeYiGgYbjKKB/XP53W15wfRC7dvKfoiJ34f6Rbyyx2btExc8XsQ==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.14.5", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-proposal-numeric-separator": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.0.tgz", "integrity": "sha512-FAhE2I6mjispy+vwwd6xWPyEx3NYFS13pikDBWUAFGZvq6POGs5eNchw8+1CYoEgBl9n11I3NkzD7ghn25PQ9Q==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.14.5", "@babel/plugin-syntax-numeric-separator": "^7.10.4" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-proposal-object-rest-spread": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.16.0.tgz", "integrity": "sha512-LU/+jp89efe5HuWJLmMmFG0+xbz+I2rSI7iLc1AlaeSMDMOGzWlc5yJrMN1d04osXN4sSfpo4O+azkBNBes0jg==", "dev": true, "dependencies": { "@babel/compat-data": "^7.16.0", "@babel/helper-compilation-targets": "^7.16.0", "@babel/helper-plugin-utils": "^7.14.5", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", "@babel/plugin-transform-parameters": "^7.16.0" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-proposal-optional-catch-binding": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.0.tgz", "integrity": "sha512-kicDo0A/5J0nrsCPbn89mTG3Bm4XgYi0CZtvex9Oyw7gGZE3HXGD0zpQNH+mo+tEfbo8wbmMvJftOwpmPy7aVw==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.14.5", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-proposal-optional-chaining": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.0.tgz", "integrity": "sha512-Y4rFpkZODfHrVo70Uaj6cC1JJOt3Pp0MdWSwIKtb8z1/lsjl9AmnB7ErRFV+QNGIfcY1Eruc2UMx5KaRnXjMyg==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.14.5", "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", "@babel/plugin-syntax-optional-chaining": "^7.8.3" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-proposal-private-methods": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.0.tgz", "integrity": "sha512-IvHmcTHDFztQGnn6aWq4t12QaBXTKr1whF/dgp9kz84X6GUcwq9utj7z2wFCUfeOup/QKnOlt2k0zxkGFx9ubg==", "dev": true, "dependencies": { "@babel/helper-create-class-features-plugin": "^7.16.0", "@babel/helper-plugin-utils": "^7.14.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-proposal-private-property-in-object": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.16.0.tgz", "integrity": "sha512-3jQUr/HBbMVZmi72LpjQwlZ55i1queL8KcDTQEkAHihttJnAPrcvG9ZNXIfsd2ugpizZo595egYV6xy+pv4Ofw==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.16.0", "@babel/helper-create-class-features-plugin": "^7.16.0", "@babel/helper-plugin-utils": "^7.14.5", "@babel/plugin-syntax-private-property-in-object": "^7.14.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-proposal-unicode-property-regex": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.16.0.tgz", "integrity": "sha512-ti7IdM54NXv29cA4+bNNKEMS4jLMCbJgl+Drv+FgYy0erJLAxNAIXcNjNjrRZEcWq0xJHsNVwQezskMFpF8N9g==", "dev": true, "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.16.0", "@babel/helper-plugin-utils": "^7.14.5" }, "engines": { "node": ">=4" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-async-generators": { "version": "7.8.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-class-properties": { "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.12.13" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-class-static-block": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-dynamic-import": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-export-namespace-from": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.3" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-json-strings": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-logical-assignment-operators": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-numeric-separator": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-object-rest-spread": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-optional-catch-binding": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-optional-chaining": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-private-property-in-object": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-top-level-await": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-arrow-functions": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.16.0.tgz", "integrity": "sha512-vIFb5250Rbh7roWARvCLvIJ/PtAU5Lhv7BtZ1u24COwpI9Ypjsh+bZcKk6rlIyalK+r0jOc1XQ8I4ovNxNrWrA==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-async-to-generator": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.0.tgz", "integrity": "sha512-PbIr7G9kR8tdH6g8Wouir5uVjklETk91GMVSUq+VaOgiinbCkBP6Q7NN/suM/QutZkMJMvcyAriogcYAdhg8Gw==", "dev": true, "dependencies": { "@babel/helper-module-imports": "^7.16.0", "@babel/helper-plugin-utils": "^7.14.5", "@babel/helper-remap-async-to-generator": "^7.16.0" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-block-scoped-functions": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.0.tgz", "integrity": "sha512-V14As3haUOP4ZWrLJ3VVx5rCnrYhMSHN/jX7z6FAt5hjRkLsb0snPCmJwSOML5oxkKO4FNoNv7V5hw/y2bjuvg==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-block-scoping": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.16.0.tgz", "integrity": "sha512-27n3l67/R3UrXfizlvHGuTwsRIFyce3D/6a37GRxn28iyTPvNXaW4XvznexRh1zUNLPjbLL22Id0XQElV94ruw==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-classes": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.16.0.tgz", "integrity": "sha512-HUxMvy6GtAdd+GKBNYDWCIA776byUQH8zjnfjxwT1P1ARv/wFu8eBDpmXQcLS/IwRtrxIReGiplOwMeyO7nsDQ==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.16.0", "@babel/helper-function-name": "^7.16.0", "@babel/helper-optimise-call-expression": "^7.16.0", "@babel/helper-plugin-utils": "^7.14.5", "@babel/helper-replace-supers": "^7.16.0", "@babel/helper-split-export-declaration": "^7.16.0", "globals": "^11.1.0" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-computed-properties": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.16.0.tgz", "integrity": "sha512-63l1dRXday6S8V3WFY5mXJwcRAnPYxvFfTlt67bwV1rTyVTM5zrp0DBBb13Kl7+ehkCVwIZPumPpFP/4u70+Tw==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-destructuring": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.16.0.tgz", "integrity": "sha512-Q7tBUwjxLTsHEoqktemHBMtb3NYwyJPTJdM+wDwb0g8PZ3kQUIzNvwD5lPaqW/p54TXBc/MXZu9Jr7tbUEUM8Q==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-dotall-regex": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.0.tgz", "integrity": "sha512-FXlDZfQeLILfJlC6I1qyEwcHK5UpRCFkaoVyA1nk9A1L1Yu583YO4un2KsLBsu3IJb4CUbctZks8tD9xPQubLw==", "dev": true, "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.16.0", "@babel/helper-plugin-utils": "^7.14.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-duplicate-keys": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.16.0.tgz", "integrity": "sha512-LIe2kcHKAZOJDNxujvmp6z3mfN6V9lJxubU4fJIGoQCkKe3Ec2OcbdlYP+vW++4MpxwG0d1wSDOJtQW5kLnkZQ==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-exponentiation-operator": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.0.tgz", "integrity": "sha512-OwYEvzFI38hXklsrbNivzpO3fh87skzx8Pnqi4LoSYeav0xHlueSoCJrSgTPfnbyzopo5b3YVAJkFIcUpK2wsw==", "dev": true, "dependencies": { "@babel/helper-builder-binary-assignment-operator-visitor": "^7.16.0", "@babel/helper-plugin-utils": "^7.14.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-for-of": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.16.0.tgz", "integrity": "sha512-5QKUw2kO+GVmKr2wMYSATCTTnHyscl6sxFRAY+rvN7h7WB0lcG0o4NoV6ZQU32OZGVsYUsfLGgPQpDFdkfjlJQ==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-function-name": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.0.tgz", "integrity": "sha512-lBzMle9jcOXtSOXUpc7tvvTpENu/NuekNJVova5lCCWCV9/U1ho2HH2y0p6mBg8fPm/syEAbfaaemYGOHCY3mg==", "dev": true, "dependencies": { "@babel/helper-function-name": "^7.16.0", "@babel/helper-plugin-utils": "^7.14.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-literals": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.16.0.tgz", "integrity": "sha512-gQDlsSF1iv9RU04clgXqRjrPyyoJMTclFt3K1cjLmTKikc0s/6vE3hlDeEVC71wLTRu72Fq7650kABrdTc2wMQ==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-member-expression-literals": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.0.tgz", "integrity": "sha512-WRpw5HL4Jhnxw8QARzRvwojp9MIE7Tdk3ez6vRyUk1MwgjJN0aNpRoXainLR5SgxmoXx/vsXGZ6OthP6t/RbUg==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-modules-amd": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.16.0.tgz", "integrity": "sha512-rWFhWbCJ9Wdmzln1NmSCqn7P0RAD+ogXG/bd9Kg5c7PKWkJtkiXmYsMBeXjDlzHpVTJ4I/hnjs45zX4dEv81xw==", "dev": true, "dependencies": { "@babel/helper-module-transforms": "^7.16.0", "@babel/helper-plugin-utils": "^7.14.5", "babel-plugin-dynamic-import-node": "^2.3.3" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-modules-commonjs": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.0.tgz", "integrity": "sha512-Dzi+NWqyEotgzk/sb7kgQPJQf7AJkQBWsVp1N6JWc1lBVo0vkElUnGdr1PzUBmfsCCN5OOFya3RtpeHk15oLKQ==", "dev": true, "dependencies": { "@babel/helper-module-transforms": "^7.16.0", "@babel/helper-plugin-utils": "^7.14.5", "@babel/helper-simple-access": "^7.16.0", "babel-plugin-dynamic-import-node": "^2.3.3" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-modules-systemjs": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.16.0.tgz", "integrity": "sha512-yuGBaHS3lF1m/5R+6fjIke64ii5luRUg97N2wr+z1sF0V+sNSXPxXDdEEL/iYLszsN5VKxVB1IPfEqhzVpiqvg==", "dev": true, "dependencies": { "@babel/helper-hoist-variables": "^7.16.0", "@babel/helper-module-transforms": "^7.16.0", "@babel/helper-plugin-utils": "^7.14.5", "@babel/helper-validator-identifier": "^7.15.7", "babel-plugin-dynamic-import-node": "^2.3.3" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-modules-umd": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.16.0.tgz", "integrity": "sha512-nx4f6no57himWiHhxDM5pjwhae5vLpTK2zCnDH8+wNLJy0TVER/LJRHl2bkt6w9Aad2sPD5iNNoUpY3X9sTGDg==", "dev": true, "dependencies": { "@babel/helper-module-transforms": "^7.16.0", "@babel/helper-plugin-utils": "^7.14.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.16.0.tgz", "integrity": "sha512-LogN88uO+7EhxWc8WZuQ8vxdSyVGxhkh8WTC3tzlT8LccMuQdA81e9SGV6zY7kY2LjDhhDOFdQVxdGwPyBCnvg==", "dev": true, "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.16.0" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "node_modules/@babel/plugin-transform-new-target": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.16.0.tgz", "integrity": "sha512-fhjrDEYv2DBsGN/P6rlqakwRwIp7rBGLPbrKxwh7oVt5NNkIhZVOY2GRV+ULLsQri1bDqwDWnU3vhlmx5B2aCw==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-object-super": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.0.tgz", "integrity": "sha512-fds+puedQHn4cPLshoHcR1DTMN0q1V9ou0mUjm8whx9pGcNvDrVVrgw+KJzzCaiTdaYhldtrUps8DWVMgrSEyg==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.14.5", "@babel/helper-replace-supers": "^7.16.0" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-parameters": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.0.tgz", "integrity": "sha512-XgnQEm1CevKROPx+udOi/8f8TiGhrUWiHiaUCIp47tE0tpFDjzXNTZc9E5CmCwxNjXTWEVqvRfWZYOTFvMa/ZQ==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-property-literals": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.0.tgz", "integrity": "sha512-XLldD4V8+pOqX2hwfWhgwXzGdnDOThxaNTgqagOcpBgIxbUvpgU2FMvo5E1RyHbk756WYgdbS0T8y0Cj9FKkWQ==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-regenerator": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.16.0.tgz", "integrity": "sha512-JAvGxgKuwS2PihiSFaDrp94XOzzTUeDeOQlcKzVAyaPap7BnZXK/lvMDiubkPTdotPKOIZq9xWXWnggUMYiExg==", "dev": true, "dependencies": { "regenerator-transform": "^0.14.2" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-reserved-words": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.16.0.tgz", "integrity": "sha512-Dgs8NNCehHSvXdhEhln8u/TtJxfVwGYCgP2OOr5Z3Ar+B+zXicEOKNTyc+eca2cuEOMtjW6m9P9ijOt8QdqWkg==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-shorthand-properties": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.0.tgz", "integrity": "sha512-iVb1mTcD8fuhSv3k99+5tlXu5N0v8/DPm2mO3WACLG6al1CGZH7v09HJyUb1TtYl/Z+KrM6pHSIJdZxP5A+xow==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-spread": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.16.0.tgz", "integrity": "sha512-Ao4MSYRaLAQczZVp9/7E7QHsCuK92yHRrmVNRe/SlEJjhzivq0BSn8mEraimL8wizHZ3fuaHxKH0iwzI13GyGg==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.14.5", "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-sticky-regex": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.0.tgz", "integrity": "sha512-/ntT2NljR9foobKk4E/YyOSwcGUXtYWv5tinMK/3RkypyNBNdhHUaq6Orw5DWq9ZcNlS03BIlEALFeQgeVAo4Q==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-template-literals": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.16.0.tgz", "integrity": "sha512-Rd4Ic89hA/f7xUSJQk5PnC+4so50vBoBfxjdQAdvngwidM8jYIBVxBZ/sARxD4e0yMXRbJVDrYf7dyRtIIKT6Q==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-typeof-symbol": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.16.0.tgz", "integrity": "sha512-++V2L8Bdf4vcaHi2raILnptTBjGEFxn5315YU+e8+EqXIucA+q349qWngCLpUYqqv233suJ6NOienIVUpS9cqg==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-unicode-escapes": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.0.tgz", "integrity": "sha512-VFi4dhgJM7Bpk8lRc5CMaRGlKZ29W9C3geZjt9beuzSUrlJxsNwX7ReLwaL6WEvsOf2EQkyIJEPtF8EXjB/g2A==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-unicode-regex": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.0.tgz", "integrity": "sha512-jHLK4LxhHjvCeZDWyA9c+P9XH1sOxRd1RO9xMtDVRAOND/PczPqizEtVdx4TQF/wyPaewqpT+tgQFYMnN/P94A==", "dev": true, "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.16.0", "@babel/helper-plugin-utils": "^7.14.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/preset-env": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.16.0.tgz", "integrity": "sha512-cdTu/W0IrviamtnZiTfixPfIncr2M1VqRrkjzZWlr1B4TVYimCFK5jkyOdP4qw2MrlKHi+b3ORj6x8GoCew8Dg==", "dev": true, "dependencies": { "@babel/compat-data": "^7.16.0", "@babel/helper-compilation-targets": "^7.16.0", "@babel/helper-plugin-utils": "^7.14.5", "@babel/helper-validator-option": "^7.14.5", "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.16.0", "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.16.0", "@babel/plugin-proposal-async-generator-functions": "^7.16.0", "@babel/plugin-proposal-class-properties": "^7.16.0", "@babel/plugin-proposal-class-static-block": "^7.16.0", "@babel/plugin-proposal-dynamic-import": "^7.16.0", "@babel/plugin-proposal-export-namespace-from": "^7.16.0", "@babel/plugin-proposal-json-strings": "^7.16.0", "@babel/plugin-proposal-logical-assignment-operators": "^7.16.0", "@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.0", "@babel/plugin-proposal-numeric-separator": "^7.16.0", "@babel/plugin-proposal-object-rest-spread": "^7.16.0", "@babel/plugin-proposal-optional-catch-binding": "^7.16.0", "@babel/plugin-proposal-optional-chaining": "^7.16.0", "@babel/plugin-proposal-private-methods": "^7.16.0", "@babel/plugin-proposal-private-property-in-object": "^7.16.0", "@babel/plugin-proposal-unicode-property-regex": "^7.16.0", "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-class-properties": "^7.12.13", "@babel/plugin-syntax-class-static-block": "^7.14.5", "@babel/plugin-syntax-dynamic-import": "^7.8.3", "@babel/plugin-syntax-export-namespace-from": "^7.8.3", "@babel/plugin-syntax-json-strings": "^7.8.3", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", "@babel/plugin-syntax-numeric-separator": "^7.10.4", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", "@babel/plugin-syntax-optional-chaining": "^7.8.3", "@babel/plugin-syntax-private-property-in-object": "^7.14.5", "@babel/plugin-syntax-top-level-await": "^7.14.5", "@babel/plugin-transform-arrow-functions": "^7.16.0", "@babel/plugin-transform-async-to-generator": "^7.16.0", "@babel/plugin-transform-block-scoped-functions": "^7.16.0", "@babel/plugin-transform-block-scoping": "^7.16.0", "@babel/plugin-transform-classes": "^7.16.0", "@babel/plugin-transform-computed-properties": "^7.16.0", "@babel/plugin-transform-destructuring": "^7.16.0", "@babel/plugin-transform-dotall-regex": "^7.16.0", "@babel/plugin-transform-duplicate-keys": "^7.16.0", "@babel/plugin-transform-exponentiation-operator": "^7.16.0", "@babel/plugin-transform-for-of": "^7.16.0", "@babel/plugin-transform-function-name": "^7.16.0", "@babel/plugin-transform-literals": "^7.16.0", "@babel/plugin-transform-member-expression-literals": "^7.16.0", "@babel/plugin-transform-modules-amd": "^7.16.0", "@babel/plugin-transform-modules-commonjs": "^7.16.0", "@babel/plugin-transform-modules-systemjs": "^7.16.0", "@babel/plugin-transform-modules-umd": "^7.16.0", "@babel/plugin-transform-named-capturing-groups-regex": "^7.16.0", "@babel/plugin-transform-new-target": "^7.16.0", "@babel/plugin-transform-object-super": "^7.16.0", "@babel/plugin-transform-parameters": "^7.16.0", "@babel/plugin-transform-property-literals": "^7.16.0", "@babel/plugin-transform-regenerator": "^7.16.0", "@babel/plugin-transform-reserved-words": "^7.16.0", "@babel/plugin-transform-shorthand-properties": "^7.16.0", "@babel/plugin-transform-spread": "^7.16.0", "@babel/plugin-transform-sticky-regex": "^7.16.0", "@babel/plugin-transform-template-literals": "^7.16.0", "@babel/plugin-transform-typeof-symbol": "^7.16.0", "@babel/plugin-transform-unicode-escapes": "^7.16.0", "@babel/plugin-transform-unicode-regex": "^7.16.0", "@babel/preset-modules": "^0.1.5", "@babel/types": "^7.16.0", "babel-plugin-polyfill-corejs2": "^0.2.3", "babel-plugin-polyfill-corejs3": "^0.3.0", "babel-plugin-polyfill-regenerator": "^0.2.3", "core-js-compat": "^3.19.0", "semver": "^6.3.0" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/preset-env/node_modules/semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true, "bin": { "semver": "bin/semver.js" } }, "node_modules/@babel/preset-modules": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", "@babel/plugin-transform-dotall-regex": "^7.4.4", "@babel/types": "^7.4.4", "esutils": "^2.0.2" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/register": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.16.0.tgz", "integrity": "sha512-lzl4yfs0zVXnooeLE0AAfYaT7F3SPA8yB2Bj4W1BiZwLbMS3MZH35ZvCWSRHvneUugwuM+Wsnrj7h0F7UmU3NQ==", "dev": true, "dependencies": { "clone-deep": "^4.0.1", "find-cache-dir": "^2.0.0", "make-dir": "^2.1.0", "pirates": "^4.0.0", "source-map-support": "^0.5.16" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/runtime": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.16.0.tgz", "integrity": "sha512-Nht8L0O8YCktmsDV6FqFue7vQLRx3Hb0B37lS5y0jDRqRxlBG4wIJHnf9/bgSE2UyipKFA01YtS+npRdTWBUyw==", "dev": true, "dependencies": { "regenerator-runtime": "^0.13.4" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/template": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.0.tgz", "integrity": "sha512-MnZdpFD/ZdYhXwiunMqqgyZyucaYsbL0IrjoGjaVhGilz+x8YB++kRfygSOIj1yOtWKPlx7NBp+9I1RQSgsd5A==", "dev": true, "dependencies": { "@babel/code-frame": "^7.16.0", "@babel/parser": "^7.16.0", "@babel/types": "^7.16.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.0.tgz", "integrity": "sha512-qQ84jIs1aRQxaGaxSysII9TuDaguZ5yVrEuC0BN2vcPlalwfLovVmCjbFDPECPXcYM/wLvNFfp8uDOliLxIoUQ==", "dev": true, "dependencies": { "@babel/code-frame": "^7.16.0", "@babel/generator": "^7.16.0", "@babel/helper-function-name": "^7.16.0", "@babel/helper-hoist-variables": "^7.16.0", "@babel/helper-split-export-declaration": "^7.16.0", "@babel/parser": "^7.16.0", "@babel/types": "^7.16.0", "debug": "^4.1.0", "globals": "^11.1.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse/node_modules/debug": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", "dev": true, "dependencies": { "ms": "2.1.2" }, "engines": { "node": ">=6.0" }, "peerDependenciesMeta": { "supports-color": { "optional": true } } }, "node_modules/@babel/traverse/node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, "node_modules/@babel/types": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.0.tgz", "integrity": "sha512-PJgg/k3SdLsGb3hhisFvtLOw5ts113klrpLuIPtCJIU+BB24fqq6lf8RWqKJEjzqXR9AEH1rIb5XTqwBHB+kQg==", "dev": true, "dependencies": { "@babel/helper-validator-identifier": "^7.15.7", "to-fast-properties": "^2.0.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@nicolo-ribaudo/chokidar-2": { "version": "2.1.8-no-fsevents.3", "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.3.tgz", "integrity": "sha512-s88O1aVtXftvp5bCPB7WnmXc5IwOZZ7YPuwNPt+GtOOXpPvad1LfbmjYv+qII7zP6RU2QGnqve27dnLycEnyEQ==", "dev": true, "optional": true }, "node_modules/@rdfjs/types": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@rdfjs/types/-/types-1.0.1.tgz", "integrity": "sha512-YxVkH0XrCNG3MWeZxfg596GFe+oorTVusmNxRP6ZHTsGczZ8AGvG3UchRNkg3Fy4MyysI7vBAA5YZbESL+VmHQ==", "dev": true, "dependencies": { "@types/node": "*" } }, "node_modules/@types/http-link-header": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/@types/http-link-header/-/http-link-header-1.0.3.tgz", "integrity": "sha512-y8HkoD/vyid+5MrJ3aas0FvU3/BVBGcyG9kgxL0Zn4JwstA8CglFPnrR0RuzOjRCXwqzL5uxWC2IO7Ub0rMU2A==", "dev": true, "dependencies": { "@types/node": "*" } }, "node_modules/@types/json-stable-stringify": { "version": "1.0.32", "resolved": "https://registry.npmjs.org/@types/json-stable-stringify/-/json-stable-stringify-1.0.32.tgz", "integrity": "sha512-q9Q6+eUEGwQkv4Sbst3J4PNgDOvpuVuKj79Hl/qnmBMEIPzB5QoFRUtjcgcg2xNUZyYUGXBk5wYIBKHt0A+Mxw==", "dev": true }, "node_modules/@types/log-symbols": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@types/log-symbols/-/log-symbols-3.0.0.tgz", "integrity": "sha512-uW/AGf/41aZ1c1dhZ3s063Ii2OqT8EQooZu3t4VCRyR3dqyA2Bg46BcKyZpnWTY7wzm6cayq4jzylnruu4KqSA==", "deprecated": "This is a stub types definition. log-symbols provides its own type definitions, so you do not need this installed.", "dev": true, "dependencies": { "log-symbols": "*" } }, "node_modules/@types/minimist": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.1.tgz", "integrity": "sha512-fZQQafSREFyuZcdWFAExYjBiCL7AUCdgsk80iO0q4yihYYdcIiH28CcuPTGFgLOCC8RlW49GSQxdHwZP+I7CNg==", "dev": true }, "node_modules/@types/n3": { "version": "1.10.4", "resolved": "https://registry.npmjs.org/@types/n3/-/n3-1.10.4.tgz", "integrity": "sha512-FfRTwcbXcScVHuAjIASveRWL6Fi6fPALl1Ge8tMESYLqU7R42LJvtdBpUi+f9YK0oQPqIN+zFFgMDFJfLMx0bg==", "dev": true, "dependencies": { "@types/node": "*", "rdf-js": "^4.0.2" } }, "node_modules/@types/node": { "version": "18.6.3", "resolved": "https://registry.npmjs.org/@types/node/-/node-18.6.3.tgz", "integrity": "sha512-6qKpDtoaYLM+5+AFChLhHermMQxc3TOEFIDzrZLPRGHPrLEwqFkkT5Kx3ju05g6X7uDPazz3jHbKPX0KzCjntg==", "dev": true }, "node_modules/@types/readable-stream": { "version": "2.3.14", "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-2.3.14.tgz", "integrity": "sha512-8jQ5Mp7bsDJEnW/69i6nAaQMoLwAVJVc7ZRAVTrdh/o6XueQsX38TEvKuYyoQj76/mg7WdlRfMrtl9pDLCJWsg==", "dev": true, "dependencies": { "@types/node": "*", "safe-buffer": "*" } }, "node_modules/@types/sax": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@types/sax/-/sax-1.2.1.tgz", "integrity": "sha512-dqYdvN7Sbw8QT/0Ci5rhjE4/iCMJEM0Y9rHpCu+gGXD9Lwbz28t6HI2yegsB6BoV1sShRMU6lAmAcgRjmFy7LA==", "dev": true, "dependencies": { "@types/node": "*" } }, "node_modules/@ungap/promise-all-settled": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", "dev": true }, "node_modules/abort-controller": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", "dependencies": { "event-target-shim": "^5.0.0" }, "engines": { "node": ">=6.5" } }, "node_modules/acorn": { "version": "6.4.2", "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", "dev": true, "bin": { "acorn": "bin/acorn" }, "engines": { "node": ">=0.4.0" } }, "node_modules/acorn-jsx": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", "dev": true, "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "node_modules/acorn-node": { "version": "1.8.2", "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", "dev": true, "dependencies": { "acorn": "^7.0.0", "acorn-walk": "^7.0.0", "xtend": "^4.0.2" } }, "node_modules/acorn-node/node_modules/acorn": { "version": "7.4.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", "dev": true, "bin": { "acorn": "bin/acorn" }, "engines": { "node": ">=0.4.0" } }, "node_modules/acorn-walk": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", "dev": true, "engines": { "node": ">=0.4.0" } }, "node_modules/ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "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" }, "funding": { "type": "github", "url": "https://github.com/sponsors/epoberezkin" } }, "node_modules/ansi-colors": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", "dev": true, "engines": { "node": ">=6" } }, "node_modules/ansi-escapes": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", "dev": true, "engines": { "node": ">=4" } }, "node_modules/ansi-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", "dev": true, "engines": { "node": ">=4" } }, "node_modules/ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "dependencies": { "color-convert": "^1.9.0" }, "engines": { "node": ">=4" } }, "node_modules/anymatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", "dev": true, "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" }, "engines": { "node": ">= 8" } }, "node_modules/append-transform": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-1.0.0.tgz", "integrity": "sha512-P009oYkeHyU742iSZJzZZywj4QRJdnTWffaKuJQLablCZ1uz6/cW4yaRgcDaoQ+uwOxxnt0gRUcwfsNP2ri0gw==", "dev": true, "dependencies": { "default-require-extensions": "^2.0.0" }, "engines": { "node": ">=4" } }, "node_modules/archy": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", "dev": true }, "node_modules/argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, "dependencies": { "sprintf-js": "~1.0.2" } }, "node_modules/arrayify-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/arrayify-stream/-/arrayify-stream-1.0.0.tgz", "integrity": "sha512-RP80ep76Lbew2wWN5ogrl2NluTnBVYYh2K3NNCcWfcmmUB7nBcNBctiJeEZAixp3I1vQ9H88iHZ9MbHSdkuupQ==", "dev": true }, "node_modules/asn1.js": { "version": "5.4.1", "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", "dev": true, "dependencies": { "bn.js": "^4.0.0", "inherits": "^2.0.1", "minimalistic-assert": "^1.0.0", "safer-buffer": "^2.1.0" } }, "node_modules/asn1.js/node_modules/bn.js": { "version": "4.12.0", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", "dev": true }, "node_modules/assert": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", "dev": true, "dependencies": { "object-assign": "^4.1.1", "util": "0.10.3" } }, "node_modules/assert/node_modules/inherits": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", "dev": true }, "node_modules/assert/node_modules/util": { "version": "0.10.3", "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", "dev": true, "dependencies": { "inherits": "2.0.1" } }, "node_modules/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, "engines": { "node": "*" } }, "node_modules/astral-regex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", "dev": true, "engines": { "node": ">=4" } }, "node_modules/available-typed-arrays": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", "dev": true, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/babel-plugin-dynamic-import-node": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", "dev": true, "dependencies": { "object.assign": "^4.1.0" } }, "node_modules/babel-plugin-polyfill-corejs2": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.3.tgz", "integrity": "sha512-NDZ0auNRzmAfE1oDDPW2JhzIMXUk+FFe2ICejmt5T4ocKgiQx3e0VCRx9NCAidcMtL2RUZaWtXnmjTCkx0tcbA==", "dev": true, "dependencies": { "@babel/compat-data": "^7.13.11", "@babel/helper-define-polyfill-provider": "^0.2.4", "semver": "^6.1.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true, "bin": { "semver": "bin/semver.js" } }, "node_modules/babel-plugin-polyfill-corejs3": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.3.0.tgz", "integrity": "sha512-JLwi9vloVdXLjzACL80j24bG6/T1gYxwowG44dg6HN/7aTPdyPbJJidf6ajoA3RPHHtW0j9KMrSOLpIZpAnPpg==", "dev": true, "dependencies": { "@babel/helper-define-polyfill-provider": "^0.2.4", "core-js-compat": "^3.18.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/babel-plugin-polyfill-regenerator": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.3.tgz", "integrity": "sha512-JVE78oRZPKFIeUqFGrSORNzQnrDwZR16oiWeGM8ZyjBn2XAT5OjP+wXx5ESuo33nUsFUEJYjtklnsKbxW5L+7g==", "dev": true, "dependencies": { "@babel/helper-define-polyfill-provider": "^0.2.4" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, "node_modules/base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", "dev": true, "funding": [ { "type": "github", "url": "https://github.com/sponsors/feross" }, { "type": "patreon", "url": "https://www.patreon.com/feross" }, { "type": "consulting", "url": "https://feross.org/support" } ] }, "node_modules/binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/bn.js": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==", "dev": true }, "node_modules/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, "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "node_modules/braces": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dev": true, "dependencies": { "fill-range": "^7.0.1" }, "engines": { "node": ">=8" } }, "node_modules/brorand": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", "dev": true }, "node_modules/browser-pack": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/browser-pack/-/browser-pack-6.1.0.tgz", "integrity": "sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA==", "dev": true, "dependencies": { "combine-source-map": "~0.8.0", "defined": "^1.0.0", "JSONStream": "^1.0.3", "safe-buffer": "^5.1.1", "through2": "^2.0.0", "umd": "^3.0.0" }, "bin": { "browser-pack": "bin/cmd.js" } }, "node_modules/browser-resolve": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-2.0.0.tgz", "integrity": "sha512-7sWsQlYL2rGLy2IWm8WL8DCTJvYLc/qlOnsakDac87SOoCd16WLsaAMdCiAqsTNHIe+SXfaqyxyo6THoWqs8WQ==", "dev": true, "dependencies": { "resolve": "^1.17.0" } }, "node_modules/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 }, "node_modules/browserify": { "version": "17.0.0", "resolved": "https://registry.npmjs.org/browserify/-/browserify-17.0.0.tgz", "integrity": "sha512-SaHqzhku9v/j6XsQMRxPyBrSP3gnwmE27gLJYZgMT2GeK3J0+0toN+MnuNYDfHwVGQfLiMZ7KSNSIXHemy905w==", "dev": true, "dependencies": { "assert": "^1.4.0", "browser-pack": "^6.0.1", "browser-resolve": "^2.0.0", "browserify-zlib": "~0.2.0", "buffer": "~5.2.1", "cached-path-relative": "^1.0.0", "concat-stream": "^1.6.0", "console-browserify": "^1.1.0", "constants-browserify": "~1.0.0", "crypto-browserify": "^3.0.0", "defined": "^1.0.0", "deps-sort": "^2.0.1", "domain-browser": "^1.2.0", "duplexer2": "~0.1.2", "events": "^3.0.0", "glob": "^7.1.0", "has": "^1.0.0", "htmlescape": "^1.1.0", "https-browserify": "^1.0.0", "inherits": "~2.0.1", "insert-module-globals": "^7.2.1", "JSONStream": "^1.0.3", "labeled-stream-splicer": "^2.0.0", "mkdirp-classic": "^0.5.2", "module-deps": "^6.2.3", "os-browserify": "~0.3.0", "parents": "^1.0.1", "path-browserify": "^1.0.0", "process": "~0.11.0", "punycode": "^1.3.2", "querystring-es3": "~0.2.0", "read-only-stream": "^2.0.0", "readable-stream": "^2.0.2", "resolve": "^1.1.4", "shasum-object": "^1.0.0", "shell-quote": "^1.6.1", "stream-browserify": "^3.0.0", "stream-http": "^3.0.0", "string_decoder": "^1.1.1", "subarg": "^1.0.0", "syntax-error": "^1.1.1", "through2": "^2.0.0", "timers-browserify": "^1.0.1", "tty-browserify": "0.0.1", "url": "~0.11.0", "util": "~0.12.0", "vm-browserify": "^1.0.0", "xtend": "^4.0.0" }, "bin": { "browserify": "bin/cmd.js" }, "engines": { "node": ">= 0.8" } }, "node_modules/browserify-aes": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", "dev": true, "dependencies": { "buffer-xor": "^1.0.3", "cipher-base": "^1.0.0", "create-hash": "^1.1.0", "evp_bytestokey": "^1.0.3", "inherits": "^2.0.1", "safe-buffer": "^5.0.1" } }, "node_modules/browserify-cipher": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", "dev": true, "dependencies": { "browserify-aes": "^1.0.4", "browserify-des": "^1.0.0", "evp_bytestokey": "^1.0.0" } }, "node_modules/browserify-des": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", "dev": true, "dependencies": { "cipher-base": "^1.0.1", "des.js": "^1.0.0", "inherits": "^2.0.1", "safe-buffer": "^5.1.2" } }, "node_modules/browserify-rsa": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", "dev": true, "dependencies": { "bn.js": "^5.0.0", "randombytes": "^2.0.1" } }, "node_modules/browserify-sign": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", "dev": true, "dependencies": { "bn.js": "^5.1.1", "browserify-rsa": "^4.0.1", "create-hash": "^1.2.0", "create-hmac": "^1.1.7", "elliptic": "^6.5.3", "inherits": "^2.0.4", "parse-asn1": "^5.1.5", "readable-stream": "^3.6.0", "safe-buffer": "^5.2.0" } }, "node_modules/browserify-sign/node_modules/readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "dev": true, "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" }, "engines": { "node": ">= 6" } }, "node_modules/browserify-zlib": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", "dev": true, "dependencies": { "pako": "~1.0.5" } }, "node_modules/browserify/node_modules/punycode": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", "dev": true }, "node_modules/browserify/node_modules/readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, "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" } }, "node_modules/browserify/node_modules/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==", "dev": true }, "node_modules/browserify/node_modules/string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "dependencies": { "safe-buffer": "~5.1.0" } }, "node_modules/browserslist": { "version": "4.17.6", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.17.6.tgz", "integrity": "sha512-uPgz3vyRTlEiCv4ee9KlsKgo2V6qPk7Jsn0KAn2OBqbqKo3iNcPEC1Ti6J4dwnz+aIRfEEEuOzC9IBk8tXUomw==", "dev": true, "dependencies": { "caniuse-lite": "^1.0.30001274", "electron-to-chromium": "^1.3.886", "escalade": "^3.1.1", "node-releases": "^2.0.1", "picocolors": "^1.0.0" }, "bin": { "browserslist": "cli.js" }, "engines": { "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/browserslist" } }, "node_modules/buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.2.1.tgz", "integrity": "sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg==", "dev": true, "dependencies": { "base64-js": "^1.0.2", "ieee754": "^1.1.4" } }, "node_modules/buffer-from": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", "dev": true }, "node_modules/buffer-xor": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", "dev": true }, "node_modules/builtin-status-codes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", "dev": true }, "node_modules/cached-path-relative": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/cached-path-relative/-/cached-path-relative-1.0.2.tgz", "integrity": "sha512-5r2GqsoEb4qMTTN9J+WzXfjov+hjxT+j3u5K+kIVNIwAd99DLCJE9pBIMP1qVeybV6JiijL385Oz0DcYxfbOIg==", "dev": true }, "node_modules/caching-transform": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-3.0.2.tgz", "integrity": "sha512-Mtgcv3lh3U0zRii/6qVgQODdPA4G3zhG+jtbCWj39RXuUFTMzH0vcdMtaJS1jPowd+It2Pqr6y3NJMQqOqCE2w==", "dev": true, "dependencies": { "hasha": "^3.0.0", "make-dir": "^2.0.0", "package-hash": "^3.0.0", "write-file-atomic": "^2.4.2" }, "engines": { "node": ">=6" } }, "node_modules/call-bind": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", "dev": true, "dependencies": { "function-bind": "^1.1.1", "get-intrinsic": "^1.0.2" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true, "engines": { "node": ">=6" } }, "node_modules/camelcase": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true, "engines": { "node": ">=6" } }, "node_modules/caniuse-lite": { "version": "1.0.30001374", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001374.tgz", "integrity": "sha512-mWvzatRx3w+j5wx/mpFN5v5twlPrabG8NqX2c6e45LCpymdoGqNvRkRutFUqpRTXKFQFNQJasvK0YT7suW6/Hw==", "dev": true, "funding": [ { "type": "opencollective", "url": "https://opencollective.com/browserslist" }, { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/caniuse-lite" } ] }, "node_modules/canonicalize": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/canonicalize/-/canonicalize-1.0.8.tgz", "integrity": "sha512-0CNTVCLZggSh7bc5VkX5WWPWO+cyZbNd07IHIsSXLia/eAq+r836hgk+8BKoEh7949Mda87VUOitx5OddVj64A==", "dev": true }, "node_modules/chai": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.4.tgz", "integrity": "sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA==", "dev": true, "dependencies": { "assertion-error": "^1.1.0", "check-error": "^1.0.2", "deep-eql": "^3.0.1", "get-func-name": "^2.0.0", "pathval": "^1.1.1", "type-detect": "^4.0.5" }, "engines": { "node": ">=4" } }, "node_modules/chai-things": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/chai-things/-/chai-things-0.2.0.tgz", "integrity": "sha1-xVEoN4+bs5nplPAAUhUZhO1uvnA=", "dev": true }, "node_modules/chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" }, "engines": { "node": ">=4" } }, "node_modules/chardet": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", "dev": true }, "node_modules/check-error": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", "dev": true, "engines": { "node": "*" } }, "node_modules/chokidar": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", "dev": true, "optional": true, "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", "readdirp": "~3.6.0" }, "engines": { "node": ">= 8.10.0" }, "optionalDependencies": { "fsevents": "~2.3.2" } }, "node_modules/chokidar/node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, "optional": true, "dependencies": { "picomatch": "^2.2.1" }, "engines": { "node": ">=8.10.0" } }, "node_modules/cipher-base": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", "dev": true, "dependencies": { "inherits": "^2.0.1", "safe-buffer": "^5.0.1" } }, "node_modules/cli-cursor": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", "dev": true, "dependencies": { "restore-cursor": "^2.0.0" }, "engines": { "node": ">=4" } }, "node_modules/cli-width": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==", "dev": true }, "node_modules/cliui": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", "dev": true, "dependencies": { "string-width": "^3.1.0", "strip-ansi": "^5.2.0", "wrap-ansi": "^5.1.0" } }, "node_modules/cliui/node_modules/ansi-regex": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", "dev": true, "engines": { "node": ">=6" } }, "node_modules/cliui/node_modules/string-width": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", "dev": true, "dependencies": { "emoji-regex": "^7.0.1", "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^5.1.0" }, "engines": { "node": ">=6" } }, "node_modules/cliui/node_modules/strip-ansi": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dev": true, "dependencies": { "ansi-regex": "^4.1.0" }, "engines": { "node": ">=6" } }, "node_modules/clone-deep": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", "dev": true, "dependencies": { "is-plain-object": "^2.0.4", "kind-of": "^6.0.2", "shallow-clone": "^3.0.0" }, "engines": { "node": ">=6" } }, "node_modules/color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, "dependencies": { "color-name": "1.1.3" } }, "node_modules/color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "dev": true }, "node_modules/colors": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", "dev": true, "engines": { "node": ">=0.1.90" } }, "node_modules/combine-source-map": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.8.0.tgz", "integrity": "sha1-pY0N8ELBhvz4IqjoAV9UUNLXmos=", "dev": true, "dependencies": { "convert-source-map": "~1.1.0", "inline-source-map": "~0.6.0", "lodash.memoize": "~3.0.3", "source-map": "~0.5.3" } }, "node_modules/combine-source-map/node_modules/convert-source-map": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz", "integrity": "sha1-SCnId+n+SbMWHzvzZziI4gRpmGA=", "dev": true }, "node_modules/commander": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", "dev": true, "engines": { "node": ">= 6" } }, "node_modules/commondir": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", "dev": true }, "node_modules/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 }, "node_modules/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, "engines": [ "node >= 0.8" ], "dependencies": { "buffer-from": "^1.0.0", "inherits": "^2.0.3", "readable-stream": "^2.2.2", "typedarray": "^0.0.6" } }, "node_modules/concat-stream/node_modules/readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, "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" } }, "node_modules/concat-stream/node_modules/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==", "dev": true }, "node_modules/concat-stream/node_modules/string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "dependencies": { "safe-buffer": "~5.1.0" } }, "node_modules/console-browserify": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", "dev": true }, "node_modules/constants-browserify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", "dev": true }, "node_modules/convert-source-map": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", "dev": true, "dependencies": { "safe-buffer": "~5.1.1" } }, "node_modules/convert-source-map/node_modules/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==", "dev": true }, "node_modules/core-js-compat": { "version": "3.19.1", "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.19.1.tgz", "integrity": "sha512-Q/VJ7jAF/y68+aUsQJ/afPOewdsGkDtcMb40J8MbuWKlK3Y+wtHq8bTHKPj2WKWLIqmS5JhHs4CzHtz6pT2W6g==", "dev": true, "dependencies": { "browserslist": "^4.17.6", "semver": "7.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/core-js" } }, "node_modules/core-js-compat/node_modules/semver": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", "dev": true, "bin": { "semver": "bin/semver.js" } }, "node_modules/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=", "dev": true }, "node_modules/cp-file": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/cp-file/-/cp-file-6.2.0.tgz", "integrity": "sha512-fmvV4caBnofhPe8kOcitBwSn2f39QLjnAnGq3gO9dfd75mUytzKNZB1hde6QHunW2Rt+OwuBOMc3i1tNElbszA==", "dev": true, "dependencies": { "graceful-fs": "^4.1.2", "make-dir": "^2.0.0", "nested-error-stacks": "^2.0.0", "pify": "^4.0.1", "safe-buffer": "^5.0.1" }, "engines": { "node": ">=6" } }, "node_modules/create-ecdh": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", "dev": true, "dependencies": { "bn.js": "^4.1.0", "elliptic": "^6.5.3" } }, "node_modules/create-ecdh/node_modules/bn.js": { "version": "4.12.0", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", "dev": true }, "node_modules/create-hash": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", "dev": true, "dependencies": { "cipher-base": "^1.0.1", "inherits": "^2.0.1", "md5.js": "^1.3.4", "ripemd160": "^2.0.1", "sha.js": "^2.4.0" } }, "node_modules/create-hmac": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", "dev": true, "dependencies": { "cipher-base": "^1.0.3", "create-hash": "^1.1.0", "inherits": "^2.0.1", "ripemd160": "^2.0.0", "safe-buffer": "^5.0.1", "sha.js": "^2.4.8" } }, "node_modules/cross-fetch": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", "dev": true, "dependencies": { "node-fetch": "2.6.7" } }, "node_modules/cross-spawn": { "version": "6.0.5", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", "dev": true, "dependencies": { "nice-try": "^1.0.4", "path-key": "^2.0.1", "semver": "^5.5.0", "shebang-command": "^1.2.0", "which": "^1.2.9" }, "engines": { "node": ">=4.8" } }, "node_modules/crypto-browserify": { "version": "3.12.0", "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", "dev": true, "dependencies": { "browserify-cipher": "^1.0.0", "browserify-sign": "^4.0.0", "create-ecdh": "^4.0.0", "create-hash": "^1.1.0", "create-hmac": "^1.1.0", "diffie-hellman": "^5.0.0", "inherits": "^2.0.1", "pbkdf2": "^3.0.3", "public-encrypt": "^4.0.0", "randombytes": "^2.0.0", "randomfill": "^1.0.3" }, "engines": { "node": "*" } }, "node_modules/dash-ast": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/dash-ast/-/dash-ast-1.0.0.tgz", "integrity": "sha512-Vy4dx7gquTeMcQR/hDkYLGUnwVil6vk4FOOct+djUnHOUWt+zJPJAaRIXaAFkPXtJjvlY7o3rfRu0/3hpnwoUA==", "dev": true }, "node_modules/decamelize": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/deep-eql": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", "dev": true, "dependencies": { "type-detect": "^4.0.0" }, "engines": { "node": ">=0.12" } }, "node_modules/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 }, "node_modules/default-require-extensions": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-2.0.0.tgz", "integrity": "sha1-9fj7sYp9bVCyH2QfZJ67Uiz+JPc=", "dev": true, "dependencies": { "strip-bom": "^3.0.0" }, "engines": { "node": ">=4" } }, "node_modules/define-properties": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", "dev": true, "dependencies": { "object-keys": "^1.0.12" }, "engines": { "node": ">= 0.4" } }, "node_modules/defined": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", "dev": true }, "node_modules/deps-sort": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/deps-sort/-/deps-sort-2.0.1.tgz", "integrity": "sha512-1orqXQr5po+3KI6kQb9A4jnXT1PBwggGl2d7Sq2xsnOeI9GPcE/tGcF9UiSZtZBM7MukY4cAh7MemS6tZYipfw==", "dev": true, "dependencies": { "JSONStream": "^1.0.3", "shasum-object": "^1.0.0", "subarg": "^1.0.0", "through2": "^2.0.0" }, "bin": { "deps-sort": "bin/cmd.js" } }, "node_modules/des.js": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", "dev": true, "dependencies": { "inherits": "^2.0.1", "minimalistic-assert": "^1.0.0" } }, "node_modules/detective": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.0.tgz", "integrity": "sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg==", "dev": true, "dependencies": { "acorn-node": "^1.6.1", "defined": "^1.0.0", "minimist": "^1.1.1" }, "bin": { "detective": "bin/detective.js" }, "engines": { "node": ">=0.8.0" } }, "node_modules/diff": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", "dev": true, "engines": { "node": ">=0.3.1" } }, "node_modules/diffie-hellman": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", "dev": true, "dependencies": { "bn.js": "^4.1.0", "miller-rabin": "^4.0.0", "randombytes": "^2.0.0" } }, "node_modules/diffie-hellman/node_modules/bn.js": { "version": "4.12.0", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", "dev": true }, "node_modules/docco": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/docco/-/docco-0.8.1.tgz", "integrity": "sha512-OFVdjpxw4aTI+FThrCY2NEWZV/nvGDFlfeQxUTMkKL+oY2gD2sMl0N5ogoAj3YLZU05UDBSh64ROYzLFzxSoSQ==", "dev": true, "dependencies": { "commander": ">= 0.5.2", "fs-extra": ">= 0.6.0", "highlight.js": ">= 8.0.x", "marked": ">= 0.2.7", "underscore": ">= 1.0.0" }, "bin": { "docco": "bin/docco" }, "engines": { "node": ">=0.2.0" } }, "node_modules/doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, "dependencies": { "esutils": "^2.0.2" }, "engines": { "node": ">=6.0.0" } }, "node_modules/domain-browser": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", "dev": true, "engines": { "node": ">=0.4", "npm": ">=1.2" } }, "node_modules/duplexer2": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", "dev": true, "dependencies": { "readable-stream": "^2.0.2" } }, "node_modules/duplexer2/node_modules/readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, "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" } }, "node_modules/duplexer2/node_modules/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==", "dev": true }, "node_modules/duplexer2/node_modules/string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "dependencies": { "safe-buffer": "~5.1.0" } }, "node_modules/electron-to-chromium": { "version": "1.3.891", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.891.tgz", "integrity": "sha512-3cpwR82QkIS01CN/dup/4Yr3BiOiRLlZlcAFn/5FbNCunMO9ojqDgEP9JEo1QNLflu3pEnPWve50gHOEKc7r6w==", "dev": true }, "node_modules/elliptic": { "version": "6.5.4", "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", "dev": true, "dependencies": { "bn.js": "^4.11.9", "brorand": "^1.1.0", "hash.js": "^1.0.0", "hmac-drbg": "^1.0.1", "inherits": "^2.0.4", "minimalistic-assert": "^1.0.1", "minimalistic-crypto-utils": "^1.0.1" } }, "node_modules/elliptic/node_modules/bn.js": { "version": "4.12.0", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", "dev": true }, "node_modules/emoji-regex": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", "dev": true }, "node_modules/error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, "dependencies": { "is-arrayish": "^0.2.1" } }, "node_modules/es-abstract": { "version": "1.19.1", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", "get-intrinsic": "^1.1.1", "get-symbol-description": "^1.0.0", "has": "^1.0.3", "has-symbols": "^1.0.2", "internal-slot": "^1.0.3", "is-callable": "^1.2.4", "is-negative-zero": "^2.0.1", "is-regex": "^1.1.4", "is-shared-array-buffer": "^1.0.1", "is-string": "^1.0.7", "is-weakref": "^1.0.1", "object-inspect": "^1.11.0", "object-keys": "^1.1.1", "object.assign": "^4.1.2", "string.prototype.trimend": "^1.0.4", "string.prototype.trimstart": "^1.0.4", "unbox-primitive": "^1.0.1" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/es-to-primitive": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "dev": true, "dependencies": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", "is-symbol": "^1.0.2" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/es6-error": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", "dev": true }, "node_modules/escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", "dev": true, "engines": { "node": ">=6" } }, "node_modules/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, "engines": { "node": ">=0.8.0" } }, "node_modules/eslint": { "version": "5.16.0", "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.16.0.tgz", "integrity": "sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg==", "dev": true, "dependencies": { "@babel/code-frame": "^7.0.0", "ajv": "^6.9.1", "chalk": "^2.1.0", "cross-spawn": "^6.0.5", "debug": "^4.0.1", "doctrine": "^3.0.0", "eslint-scope": "^4.0.3", "eslint-utils": "^1.3.1", "eslint-visitor-keys": "^1.0.0", "espree": "^5.0.1", "esquery": "^1.0.1", "esutils": "^2.0.2", "file-entry-cache": "^5.0.1", "functional-red-black-tree": "^1.0.1", "glob": "^7.1.2", "globals": "^11.7.0", "ignore": "^4.0.6", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "inquirer": "^6.2.2", "js-yaml": "^3.13.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.3.0", "lodash": "^4.17.11", "minimatch": "^3.0.4", "mkdirp": "^0.5.1", "natural-compare": "^1.4.0", "optionator": "^0.8.2", "path-is-inside": "^1.0.2", "progress": "^2.0.0", "regexpp": "^2.0.1", "semver": "^5.5.1", "strip-ansi": "^4.0.0", "strip-json-comments": "^2.0.1", "table": "^5.2.3", "text-table": "^0.2.0" }, "bin": { "eslint": "bin/eslint.js" }, "engines": { "node": "^6.14.0 || ^8.10.0 || >=9.10.0" } }, "node_modules/eslint-scope": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", "dev": true, "dependencies": { "esrecurse": "^4.1.0", "estraverse": "^4.1.1" }, "engines": { "node": ">=4.0.0" } }, "node_modules/eslint-utils": { "version": "1.4.3", "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", "dev": true, "dependencies": { "eslint-visitor-keys": "^1.1.0" }, "engines": { "node": ">=6" } }, "node_modules/eslint-visitor-keys": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", "dev": true, "engines": { "node": ">=4" } }, "node_modules/eslint/node_modules/debug": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", "dev": true, "dependencies": { "ms": "2.1.2" }, "engines": { "node": ">=6.0" }, "peerDependenciesMeta": { "supports-color": { "optional": true } } }, "node_modules/eslint/node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, "node_modules/espree": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/espree/-/espree-5.0.1.tgz", "integrity": "sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A==", "dev": true, "dependencies": { "acorn": "^6.0.7", "acorn-jsx": "^5.0.0", "eslint-visitor-keys": "^1.0.0" }, "engines": { "node": ">=6.0.0" } }, "node_modules/esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true, "bin": { "esparse": "bin/esparse.js", "esvalidate": "bin/esvalidate.js" }, "engines": { "node": ">=4" } }, "node_modules/esquery": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", "dev": true, "dependencies": { "estraverse": "^5.1.0" }, "engines": { "node": ">=0.10" } }, "node_modules/esquery/node_modules/estraverse": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", "dev": true, "engines": { "node": ">=4.0" } }, "node_modules/esrecurse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, "dependencies": { "estraverse": "^5.2.0" }, "engines": { "node": ">=4.0" } }, "node_modules/esrecurse/node_modules/estraverse": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", "dev": true, "engines": { "node": ">=4.0" } }, "node_modules/estraverse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true, "engines": { "node": ">=4.0" } }, "node_modules/esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/event-target-shim": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", "engines": { "node": ">=6" } }, "node_modules/events": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", "dev": true, "engines": { "node": ">=0.8.x" } }, "node_modules/evp_bytestokey": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", "dev": true, "dependencies": { "md5.js": "^1.3.4", "safe-buffer": "^5.1.1" } }, "node_modules/external-editor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", "dev": true, "dependencies": { "chardet": "^0.7.0", "iconv-lite": "^0.4.24", "tmp": "^0.0.33" }, "engines": { "node": ">=4" } }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", "dev": true }, "node_modules/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 }, "node_modules/fast-safe-stringify": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", "dev": true }, "node_modules/figures": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", "dev": true, "dependencies": { "escape-string-regexp": "^1.0.5" }, "engines": { "node": ">=4" } }, "node_modules/file-entry-cache": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", "dev": true, "dependencies": { "flat-cache": "^2.0.1" }, "engines": { "node": ">=4" } }, "node_modules/fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "dev": true, "dependencies": { "to-regex-range": "^5.0.1" }, "engines": { "node": ">=8" } }, "node_modules/find-cache-dir": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", "dev": true, "dependencies": { "commondir": "^1.0.1", "make-dir": "^2.0.0", "pkg-dir": "^3.0.0" }, "engines": { "node": ">=6" } }, "node_modules/find-up": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, "dependencies": { "locate-path": "^3.0.0" }, "engines": { "node": ">=6" } }, "node_modules/flat": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", "dev": true, "bin": { "flat": "cli.js" } }, "node_modules/flat-cache": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", "dev": true, "dependencies": { "flatted": "^2.0.0", "rimraf": "2.6.3", "write": "1.0.3" }, "engines": { "node": ">=4" } }, "node_modules/flatted": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", "dev": true }, "node_modules/foreach": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", "dev": true }, "node_modules/foreground-child": { "version": "1.5.6", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-1.5.6.tgz", "integrity": "sha1-T9ca0t/elnibmApcCilZN8svXOk=", "dev": true, "dependencies": { "cross-spawn": "^4", "signal-exit": "^3.0.0" } }, "node_modules/foreground-child/node_modules/cross-spawn": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-4.0.2.tgz", "integrity": "sha1-e5JHYhwjrf3ThWAEqCPL45dCTUE=", "dev": true, "dependencies": { "lru-cache": "^4.0.1", "which": "^1.2.9" } }, "node_modules/fs-extra": { "version": "10.0.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", "dev": true, "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" }, "engines": { "node": ">=12" } }, "node_modules/fs-readdir-recursive": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==", "dev": true }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "dev": true }, "node_modules/fsevents": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", "dev": true, "hasInstallScript": true, "optional": true, "os": [ "darwin" ], "engines": { "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, "node_modules/function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "dev": true }, "node_modules/functional-red-black-tree": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", "dev": true }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/get-assigned-identifiers": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/get-assigned-identifiers/-/get-assigned-identifiers-1.2.0.tgz", "integrity": "sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ==", "dev": true }, "node_modules/get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true, "engines": { "node": "6.* || 8.* || >= 10.*" } }, "node_modules/get-func-name": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", "dev": true, "engines": { "node": "*" } }, "node_modules/get-intrinsic": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", "dev": true, "dependencies": { "function-bind": "^1.1.1", "has": "^1.0.3", "has-symbols": "^1.0.1" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/get-symbol-description": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.1.1" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/glob": { "version": "7.1.7", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", "dev": true, "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" }, "engines": { "node": "*" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/glob-parent": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, "dependencies": { "is-glob": "^4.0.1" }, "engines": { "node": ">= 6" } }, "node_modules/globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true, "engines": { "node": ">=4" } }, "node_modules/graceful-fs": { "version": "4.2.6", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", "dev": true }, "node_modules/growl": { "version": "1.10.5", "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", "dev": true, "engines": { "node": ">=4.x" } }, "node_modules/has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "dev": true, "dependencies": { "function-bind": "^1.1.1" }, "engines": { "node": ">= 0.4.0" } }, "node_modules/has-bigints": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true, "engines": { "node": ">=4" } }, "node_modules/has-symbols": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", "dev": true, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/has-tostringtag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", "dev": true, "dependencies": { "has-symbols": "^1.0.2" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/hash-base": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", "dev": true, "dependencies": { "inherits": "^2.0.4", "readable-stream": "^3.6.0", "safe-buffer": "^5.2.0" }, "engines": { "node": ">=4" } }, "node_modules/hash-base/node_modules/readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "dev": true, "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" }, "engines": { "node": ">= 6" } }, "node_modules/hash.js": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", "dev": true, "dependencies": { "inherits": "^2.0.3", "minimalistic-assert": "^1.0.1" } }, "node_modules/hasha": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/hasha/-/hasha-3.0.0.tgz", "integrity": "sha1-UqMvq4Vp1BymmmH/GiFPjrfIvTk=", "dev": true, "dependencies": { "is-stream": "^1.0.1" }, "engines": { "node": ">=4" } }, "node_modules/he": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "dev": true, "bin": { "he": "bin/he" } }, "node_modules/highlight.js": { "version": "11.0.1", "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.0.1.tgz", "integrity": "sha512-EqYpWyTF2s8nMfttfBA2yLKPNoZCO33pLS4MnbXQ4hECf1TKujCt1Kq7QAdrio7roL4+CqsfjqwYj4tYgq0pJQ==", "dev": true, "engines": { "node": ">=12.0.0" } }, "node_modules/hmac-drbg": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", "dev": true, "dependencies": { "hash.js": "^1.0.3", "minimalistic-assert": "^1.0.0", "minimalistic-crypto-utils": "^1.0.1" } }, "node_modules/hosted-git-info": { "version": "2.8.9", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", "dev": true }, "node_modules/html-escaper": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true }, "node_modules/htmlescape": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/htmlescape/-/htmlescape-1.1.1.tgz", "integrity": "sha1-OgPtwiFLyjtmQko+eVk0lQnLA1E=", "dev": true, "engines": { "node": ">=0.10" } }, "node_modules/http-link-header": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/http-link-header/-/http-link-header-1.0.5.tgz", "integrity": "sha512-msKrMbv/xHzhdOD4sstbEr+NbGqpv8ZtZliiCeByGENJo1jK1GZ/81zHF9HpWtEH5ihovPpdqHXniwZapJCKEA==", "dev": true, "engines": { "node": ">=6.0.0" } }, "node_modules/https-browserify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", "dev": true }, "node_modules/iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, "dependencies": { "safer-buffer": ">= 2.1.2 < 3" }, "engines": { "node": ">=0.10.0" } }, "node_modules/ieee754": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", "dev": true, "funding": [ { "type": "github", "url": "https://github.com/sponsors/feross" }, { "type": "patreon", "url": "https://www.patreon.com/feross" }, { "type": "consulting", "url": "https://feross.org/support" } ] }, "node_modules/ignore": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", "dev": true, "engines": { "node": ">= 4" } }, "node_modules/import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" }, "engines": { "node": ">=6" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", "dev": true, "engines": { "node": ">=0.8.19" } }, "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, "dependencies": { "once": "^1.3.0", "wrappy": "1" } }, "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, "node_modules/inline-source-map": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/inline-source-map/-/inline-source-map-0.6.2.tgz", "integrity": "sha1-+Tk0ccGKedFyT4Y/o4tYY3Ct4qU=", "dev": true, "dependencies": { "source-map": "~0.5.3" } }, "node_modules/inquirer": { "version": "6.5.2", "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz", "integrity": "sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==", "dev": true, "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" }, "engines": { "node": ">=6.0.0" } }, "node_modules/inquirer/node_modules/ansi-regex": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", "dev": true, "engines": { "node": ">=6" } }, "node_modules/inquirer/node_modules/strip-ansi": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dev": true, "dependencies": { "ansi-regex": "^4.1.0" }, "engines": { "node": ">=6" } }, "node_modules/insert-module-globals": { "version": "7.2.1", "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-7.2.1.tgz", "integrity": "sha512-ufS5Qq9RZN+Bu899eA9QCAYThY+gGW7oRkmb0vC93Vlyu/CFGcH0OYPEjVkDXA5FEbTt1+VWzdoOD3Ny9N+8tg==", "dev": true, "dependencies": { "acorn-node": "^1.5.2", "combine-source-map": "^0.8.0", "concat-stream": "^1.6.1", "is-buffer": "^1.1.0", "JSONStream": "^1.0.3", "path-is-absolute": "^1.0.1", "process": "~0.11.0", "through2": "^2.0.0", "undeclared-identifiers": "^1.1.2", "xtend": "^4.0.0" }, "bin": { "insert-module-globals": "bin/cmd.js" } }, "node_modules/internal-slot": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", "dev": true, "dependencies": { "get-intrinsic": "^1.1.0", "has": "^1.0.3", "side-channel": "^1.0.4" }, "engines": { "node": ">= 0.4" } }, "node_modules/is-arguments": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", "dev": true }, "node_modules/is-bigint": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.2.tgz", "integrity": "sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA==", "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, "dependencies": { "binary-extensions": "^2.0.0" }, "engines": { "node": ">=8" } }, "node_modules/is-boolean-object": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.1.tgz", "integrity": "sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng==", "dev": true, "dependencies": { "call-bind": "^1.0.2" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", "dev": true }, "node_modules/is-callable": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", "dev": true, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-core-module": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz", "integrity": "sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==", "dev": true, "dependencies": { "has": "^1.0.3" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-date-object": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.4.tgz", "integrity": "sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A==", "dev": true, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/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, "engines": { "node": ">=4" } }, "node_modules/is-generator-function": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", "dev": true, "dependencies": { "has-tostringtag": "^1.0.0" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-glob": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", "dev": true, "dependencies": { "is-extglob": "^2.1.1" }, "engines": { "node": ">=0.10.0" } }, "node_modules/is-negative-zero": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", "dev": true, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, "engines": { "node": ">=0.12.0" } }, "node_modules/is-number-object": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.5.tgz", "integrity": "sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw==", "dev": true, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-plain-obj": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/is-plain-object": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dev": true, "dependencies": { "isobject": "^3.0.1" }, "engines": { "node": ">=0.10.0" } }, "node_modules/is-regex": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-shared-array-buffer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz", "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==", "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/is-string": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", "dev": true, "dependencies": { "has-tostringtag": "^1.0.0" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-symbol": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", "dev": true, "dependencies": { "has-symbols": "^1.0.2" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-typed-array": { "version": "1.1.8", "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.8.tgz", "integrity": "sha512-HqH41TNZq2fgtGT8WHVFVJhBVGuY3AnP3Q36K8JKXUxSxRgk/d+7NjmwG2vo2mYmXK8UYZKu0qH8bVP5gEisjA==", "dev": true, "dependencies": { "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", "es-abstract": "^1.18.5", "foreach": "^2.0.5", "has-tostringtag": "^1.0.0" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-unicode-supported": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "dev": true, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/is-weakref": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.1.tgz", "integrity": "sha512-b2jKc2pQZjaeFYWEf7ScFj+Be1I+PXmlu572Q8coTXZ+LD/QQZ7ShPMst8h16riVgyXTQwUsFEl74mDvc/3MHQ==", "dev": true, "dependencies": { "call-bind": "^1.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", "dev": true }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", "dev": true }, "node_modules/isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/istanbul-lib-coverage": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==", "dev": true, "engines": { "node": ">=6" } }, "node_modules/istanbul-lib-hook": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-2.0.7.tgz", "integrity": "sha512-vrRztU9VRRFDyC+aklfLoeXyNdTfga2EI3udDGn4cZ6fpSXpHLV9X6CHvfoMCPtggg8zvDDmC4b9xfu0z6/llA==", "dev": true, "dependencies": { "append-transform": "^1.0.0" }, "engines": { "node": ">=6" } }, "node_modules/istanbul-lib-instrument": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz", "integrity": "sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA==", "dev": true, "dependencies": { "@babel/generator": "^7.4.0", "@babel/parser": "^7.4.3", "@babel/template": "^7.4.0", "@babel/traverse": "^7.4.3", "@babel/types": "^7.4.0", "istanbul-lib-coverage": "^2.0.5", "semver": "^6.0.0" }, "engines": { "node": ">=6" } }, "node_modules/istanbul-lib-instrument/node_modules/semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true, "bin": { "semver": "bin/semver.js" } }, "node_modules/istanbul-lib-report": { "version": "2.0.8", "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz", "integrity": "sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ==", "dev": true, "dependencies": { "istanbul-lib-coverage": "^2.0.5", "make-dir": "^2.1.0", "supports-color": "^6.1.0" }, "engines": { "node": ">=6" } }, "node_modules/istanbul-lib-report/node_modules/supports-color": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", "dev": true, "dependencies": { "has-flag": "^3.0.0" }, "engines": { "node": ">=6" } }, "node_modules/istanbul-lib-source-maps": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz", "integrity": "sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw==", "dev": true, "dependencies": { "debug": "^4.1.1", "istanbul-lib-coverage": "^2.0.5", "make-dir": "^2.1.0", "rimraf": "^2.6.3", "source-map": "^0.6.1" }, "engines": { "node": ">=6" } }, "node_modules/istanbul-lib-source-maps/node_modules/debug": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", "dev": true, "dependencies": { "ms": "2.1.2" }, "engines": { "node": ">=6.0" }, "peerDependenciesMeta": { "supports-color": { "optional": true } } }, "node_modules/istanbul-lib-source-maps/node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, "node_modules/istanbul-lib-source-maps/node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/istanbul-reports": { "version": "2.2.7", "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-2.2.7.tgz", "integrity": "sha512-uu1F/L1o5Y6LzPVSVZXNOoD/KXpJue9aeLRd0sM9uMXfZvzomB0WxVamWb5ue8kA2vVWEmW7EG+A5n3f1kqHKg==", "dev": true, "dependencies": { "html-escaper": "^2.0.0" }, "engines": { "node": ">=6" } }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "dev": true }, "node_modules/js-yaml": { "version": "3.14.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "node_modules/jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", "dev": true, "bin": { "jsesc": "bin/jsesc" }, "engines": { "node": ">=4" } }, "node_modules/json-parse-better-errors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", "dev": true }, "node_modules/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==", "dev": true }, "node_modules/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, "dependencies": { "jsonify": "~0.0.0" } }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", "dev": true }, "node_modules/json5": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", "dev": true, "dependencies": { "minimist": "^1.2.5" }, "bin": { "json5": "lib/cli.js" }, "engines": { "node": ">=6" } }, "node_modules/jsonfile": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dev": true, "dependencies": { "universalify": "^2.0.0" }, "optionalDependencies": { "graceful-fs": "^4.1.6" } }, "node_modules/jsonify": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", "dev": true, "engines": { "node": "*" } }, "node_modules/jsonld-context-parser": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/jsonld-context-parser/-/jsonld-context-parser-2.2.0.tgz", "integrity": "sha512-h4ykp8iUOV4Xm6MgS1zVrytyw/dNVgOeofMCcD/5mHPng3i49qAsaomLT0BOXqYas7lwITVT5c6NZIRVMdXfVQ==", "dev": true, "dependencies": { "@types/http-link-header": "^1.0.1", "@types/node": "^18.0.0", "canonicalize": "^1.0.1", "cross-fetch": "^3.0.6", "http-link-header": "^1.0.2", "relative-to-absolute-iri": "^1.0.5" }, "bin": { "jsonld-context-parse": "bin/jsonld-context-parse.js" } }, "node_modules/jsonld-streaming-parser": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/jsonld-streaming-parser/-/jsonld-streaming-parser-3.0.0.tgz", "integrity": "sha512-n+IW+gTIw2UeXWXdN0ZlPY4DvKANUCrV0HOagXOsDUCvkO/SiDcYOZn2hrDkBGKm7yD5sefvvG3d/FxbeepbuA==", "dev": true, "dependencies": { "@rdfjs/types": "*", "@types/http-link-header": "^1.0.1", "@types/readable-stream": "^2.3.13", "buffer": "^6.0.3", "canonicalize": "^1.0.1", "http-link-header": "^1.0.2", "jsonld-context-parser": "^2.1.3", "jsonparse": "^1.3.1", "rdf-data-factory": "^1.1.0", "readable-stream": "^4.0.0" } }, "node_modules/jsonld-streaming-parser/node_modules/buffer": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", "dev": true, "funding": [ { "type": "github", "url": "https://github.com/sponsors/feross" }, { "type": "patreon", "url": "https://www.patreon.com/feross" }, { "type": "consulting", "url": "https://feross.org/support" } ], "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" } }, "node_modules/jsonparse": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", "dev": true, "engines": [ "node >= 0.2.0" ] }, "node_modules/JSONStream": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", "dev": true, "dependencies": { "jsonparse": "^1.2.0", "through": ">=2.2.7 <3" }, "bin": { "JSONStream": "bin.js" }, "engines": { "node": "*" } }, "node_modules/kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/labeled-stream-splicer": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-2.0.2.tgz", "integrity": "sha512-Ca4LSXFFZUjPScRaqOcFxneA0VpKZr4MMYCljyQr4LIewTLb3Y0IUTIsnBBsVubIeEfxeSZpSjSsRM8APEQaAw==", "dev": true, "dependencies": { "inherits": "^2.0.1", "stream-splicer": "^2.0.0" } }, "node_modules/levn": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", "dev": true, "dependencies": { "prelude-ls": "~1.1.2", "type-check": "~0.3.2" }, "engines": { "node": ">= 0.8.0" } }, "node_modules/load-json-file": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", "dev": true, "dependencies": { "graceful-fs": "^4.1.2", "parse-json": "^4.0.0", "pify": "^3.0.0", "strip-bom": "^3.0.0" }, "engines": { "node": ">=4" } }, "node_modules/load-json-file/node_modules/pify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", "dev": true, "engines": { "node": ">=4" } }, "node_modules/locate-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, "dependencies": { "p-locate": "^3.0.0", "path-exists": "^3.0.0" }, "engines": { "node": ">=6" } }, "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, "node_modules/lodash.debounce": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", "dev": true }, "node_modules/lodash.flattendeep": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=", "dev": true }, "node_modules/lodash.memoize": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-3.0.4.tgz", "integrity": "sha1-LcvSwofLwKVcxCMovQxzYVDVPj8=", "dev": true }, "node_modules/log-symbols": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz", "integrity": "sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==", "dev": true, "dependencies": { "chalk": "^4.0.0" }, "engines": { "node": ">=10" } }, "node_modules/log-symbols/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { "color-convert": "^2.0.1" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/log-symbols/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/chalk/chalk?sponsor=1" } }, "node_modules/log-symbols/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "dependencies": { "color-name": "~1.1.4" }, "engines": { "node": ">=7.0.0" } }, "node_modules/log-symbols/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "node_modules/log-symbols/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/log-symbols/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { "has-flag": "^4.0.0" }, "engines": { "node": ">=8" } }, "node_modules/lru-cache": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", "dev": true, "dependencies": { "pseudomap": "^1.0.2", "yallist": "^2.1.2" } }, "node_modules/make-dir": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", "dev": true, "dependencies": { "pify": "^4.0.1", "semver": "^5.6.0" }, "engines": { "node": ">=6" } }, "node_modules/marked": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/marked/-/marked-2.1.3.tgz", "integrity": "sha512-/Q+7MGzaETqifOMWYEA7HVMaZb4XbcRfaOzcSsHZEith83KGlvaSG33u0SKu89Mj5h+T8V2hM+8O45Qc5XTgwA==", "dev": true, "bin": { "marked": "bin/marked" }, "engines": { "node": ">= 10" } }, "node_modules/md5.js": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", "dev": true, "dependencies": { "hash-base": "^3.0.0", "inherits": "^2.0.1", "safe-buffer": "^5.1.2" } }, "node_modules/merge-source-map": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz", "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==", "dev": true, "dependencies": { "source-map": "^0.6.1" } }, "node_modules/merge-source-map/node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/miller-rabin": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", "dev": true, "dependencies": { "bn.js": "^4.0.0", "brorand": "^1.0.1" }, "bin": { "miller-rabin": "bin/miller-rabin" } }, "node_modules/miller-rabin/node_modules/bn.js": { "version": "4.12.0", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", "dev": true }, "node_modules/mimic-fn": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", "dev": true, "engines": { "node": ">=4" } }, "node_modules/minimalistic-assert": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", "dev": true }, "node_modules/minimalistic-crypto-utils": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", "dev": true }, "node_modules/minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, "dependencies": { "brace-expansion": "^1.1.7" }, "engines": { "node": "*" } }, "node_modules/minimist": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", "dev": true }, "node_modules/mkdirp": { "version": "0.5.5", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", "dev": true, "dependencies": { "minimist": "^1.2.5" }, "bin": { "mkdirp": "bin/cmd.js" } }, "node_modules/mkdirp-classic": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", "dev": true }, "node_modules/mocha": { "version": "8.4.0", "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.4.0.tgz", "integrity": "sha512-hJaO0mwDXmZS4ghXsvPVriOhsxQ7ofcpQdm8dE+jISUOKopitvnXFQmpRR7jd2K6VBG6E26gU3IAbXXGIbu4sQ==", "dev": true, "dependencies": { "@ungap/promise-all-settled": "1.1.2", "ansi-colors": "4.1.1", "browser-stdout": "1.3.1", "chokidar": "3.5.1", "debug": "4.3.1", "diff": "5.0.0", "escape-string-regexp": "4.0.0", "find-up": "5.0.0", "glob": "7.1.6", "growl": "1.10.5", "he": "1.2.0", "js-yaml": "4.0.0", "log-symbols": "4.0.0", "minimatch": "3.0.4", "ms": "2.1.3", "nanoid": "3.1.20", "serialize-javascript": "5.0.1", "strip-json-comments": "3.1.1", "supports-color": "8.1.1", "which": "2.0.2", "wide-align": "1.1.3", "workerpool": "6.1.0", "yargs": "16.2.0", "yargs-parser": "20.2.4", "yargs-unparser": "2.0.0" }, "bin": { "_mocha": "bin/_mocha", "mocha": "bin/mocha" }, "engines": { "node": ">= 10.12.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/mochajs" } }, "node_modules/mocha/node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/mocha/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { "color-convert": "^2.0.1" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/mocha/node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, "node_modules/mocha/node_modules/chokidar": { "version": "3.5.1", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", "dev": true, "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.5.0" }, "engines": { "node": ">= 8.10.0" }, "optionalDependencies": { "fsevents": "~2.3.1" } }, "node_modules/mocha/node_modules/cliui": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dev": true, "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", "wrap-ansi": "^7.0.0" } }, "node_modules/mocha/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "dependencies": { "color-name": "~1.1.4" }, "engines": { "node": ">=7.0.0" } }, "node_modules/mocha/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "node_modules/mocha/node_modules/debug": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", "dev": true, "dependencies": { "ms": "2.1.2" }, "engines": { "node": ">=6.0" }, "peerDependenciesMeta": { "supports-color": { "optional": true } } }, "node_modules/mocha/node_modules/debug/node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, "node_modules/mocha/node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, "node_modules/mocha/node_modules/escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/mocha/node_modules/find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/mocha/node_modules/glob": { "version": "7.1.6", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", "dev": true, "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" }, "engines": { "node": "*" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/mocha/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/mocha/node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/mocha/node_modules/js-yaml": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.0.0.tgz", "integrity": "sha512-pqon0s+4ScYUvX30wxQi3PogGFAlUyH0awepWvwkj4jD4v+ova3RiYw8bmA6x2rDrEaj8i/oWKoRxpVNW+Re8Q==", "dev": true, "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "node_modules/mocha/node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, "dependencies": { "p-locate": "^5.0.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/mocha/node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true }, "node_modules/mocha/node_modules/p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "dependencies": { "yocto-queue": "^0.1.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/mocha/node_modules/p-locate": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, "dependencies": { "p-limit": "^3.0.2" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/mocha/node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/mocha/node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" }, "engines": { "node": ">=8" } }, "node_modules/mocha/node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "dependencies": { "ansi-regex": "^5.0.1" }, "engines": { "node": ">=8" } }, "node_modules/mocha/node_modules/strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/mocha/node_modules/supports-color": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "dependencies": { "has-flag": "^4.0.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/chalk/supports-color?sponsor=1" } }, "node_modules/mocha/node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "bin/node-which" }, "engines": { "node": ">= 8" } }, "node_modules/mocha/node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, "node_modules/mocha/node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true, "engines": { "node": ">=10" } }, "node_modules/mocha/node_modules/yargs": { "version": "16.2.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, "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" }, "engines": { "node": ">=10" } }, "node_modules/mocha/node_modules/yargs-parser": { "version": "20.2.4", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", "dev": true, "engines": { "node": ">=10" } }, "node_modules/module-deps": { "version": "6.2.3", "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-6.2.3.tgz", "integrity": "sha512-fg7OZaQBcL4/L+AK5f4iVqf9OMbCclXfy/znXRxTVhJSeW5AIlS9AwheYwDaXM3lVW7OBeaeUEY3gbaC6cLlSA==", "dev": true, "dependencies": { "browser-resolve": "^2.0.0", "cached-path-relative": "^1.0.2", "concat-stream": "~1.6.0", "defined": "^1.0.0", "detective": "^5.2.0", "duplexer2": "^0.1.2", "inherits": "^2.0.1", "JSONStream": "^1.0.3", "parents": "^1.0.0", "readable-stream": "^2.0.2", "resolve": "^1.4.0", "stream-combiner2": "^1.1.1", "subarg": "^1.0.0", "through2": "^2.0.0", "xtend": "^4.0.0" }, "bin": { "module-deps": "bin/cmd.js" }, "engines": { "node": ">= 0.8.0" } }, "node_modules/module-deps/node_modules/readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, "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" } }, "node_modules/module-deps/node_modules/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==", "dev": true }, "node_modules/module-deps/node_modules/string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "dependencies": { "safe-buffer": "~5.1.0" } }, "node_modules/mute-stream": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", "dev": true }, "node_modules/n3": { "version": "1.16.2", "resolved": "https://registry.npmjs.org/n3/-/n3-1.16.2.tgz", "integrity": "sha512-5vYa2HuNEJ+a26FEs4FGgfFLgaPOODaZpJlc7FS0eUjDumc4uK0cvx216PjKXBkLzmAsSqGgQPwqztcLLvwDsw==", "dev": true, "dependencies": { "queue-microtask": "^1.1.2", "readable-stream": "^3.6.0" }, "engines": { "node": ">=8.0" } }, "node_modules/n3/node_modules/readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "dev": true, "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" }, "engines": { "node": ">= 6" } }, "node_modules/nanoid": { "version": "3.1.20", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.20.tgz", "integrity": "sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw==", "dev": true, "bin": { "nanoid": "bin/nanoid.cjs" }, "engines": { "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, "node_modules/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 }, "node_modules/nested-error-stacks": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-2.1.0.tgz", "integrity": "sha512-AO81vsIO1k1sM4Zrd6Hu7regmJN1NSiAja10gc4bX3F0wd+9rQmcuHQaHVQCYIEC8iFXnE+mavh23GOt7wBgug==", "dev": true }, "node_modules/nice-try": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", "dev": true }, "node_modules/node-fetch": { "version": "2.6.7", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", "dev": true, "dependencies": { "whatwg-url": "^5.0.0" }, "engines": { "node": "4.x || >=6.0.0" }, "peerDependencies": { "encoding": "^0.1.0" }, "peerDependenciesMeta": { "encoding": { "optional": true } } }, "node_modules/node-modules-regexp": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/node-releases": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz", "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==", "dev": true }, "node_modules/normalize-package-data": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, "dependencies": { "hosted-git-info": "^2.1.4", "resolve": "^1.10.0", "semver": "2 || 3 || 4 || 5", "validate-npm-package-license": "^3.0.1" } }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/nyc": { "version": "14.1.1", "resolved": "https://registry.npmjs.org/nyc/-/nyc-14.1.1.tgz", "integrity": "sha512-OI0vm6ZGUnoGZv/tLdZ2esSVzDwUC88SNs+6JoSOMVxA+gKMB8Tk7jBwgemLx4O40lhhvZCVw1C+OYLOBOPXWw==", "dev": true, "dependencies": { "archy": "^1.0.0", "caching-transform": "^3.0.2", "convert-source-map": "^1.6.0", "cp-file": "^6.2.0", "find-cache-dir": "^2.1.0", "find-up": "^3.0.0", "foreground-child": "^1.5.6", "glob": "^7.1.3", "istanbul-lib-coverage": "^2.0.5", "istanbul-lib-hook": "^2.0.7", "istanbul-lib-instrument": "^3.3.0", "istanbul-lib-report": "^2.0.8", "istanbul-lib-source-maps": "^3.0.6", "istanbul-reports": "^2.2.4", "js-yaml": "^3.13.1", "make-dir": "^2.1.0", "merge-source-map": "^1.1.0", "resolve-from": "^4.0.0", "rimraf": "^2.6.3", "signal-exit": "^3.0.2", "spawn-wrap": "^1.4.2", "test-exclude": "^5.2.3", "uuid": "^3.3.2", "yargs": "^13.2.2", "yargs-parser": "^13.0.0" }, "bin": { "nyc": "bin/nyc.js" }, "engines": { "node": ">=6" } }, "node_modules/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, "engines": { "node": ">=0.10.0" } }, "node_modules/object-inspect": { "version": "1.11.0", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==", "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/object-keys": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true, "engines": { "node": ">= 0.4" } }, "node_modules/object.assign": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", "dev": true, "dependencies": { "call-bind": "^1.0.0", "define-properties": "^1.1.3", "has-symbols": "^1.0.1", "object-keys": "^1.1.1" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, "dependencies": { "wrappy": "1" } }, "node_modules/onetime": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", "dev": true, "dependencies": { "mimic-fn": "^1.0.0" }, "engines": { "node": ">=4" } }, "node_modules/optionator": { "version": "0.8.3", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", "dev": true, "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" }, "engines": { "node": ">= 0.8.0" } }, "node_modules/os-browserify": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", "dev": true }, "node_modules/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, "engines": { "node": ">=0.10.0" } }, "node_modules/os-shim": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/os-shim/-/os-shim-0.1.3.tgz", "integrity": "sha1-a2LDeRz3kJ6jXtRuF2WLtBfLORc=", "dev": true, "engines": { "node": ">= 0.4.0" } }, "node_modules/os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/p-limit": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "dependencies": { "p-try": "^2.0.0" }, "engines": { "node": ">=6" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/p-locate": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, "dependencies": { "p-limit": "^2.0.0" }, "engines": { "node": ">=6" } }, "node_modules/p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true, "engines": { "node": ">=6" } }, "node_modules/package-hash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-3.0.0.tgz", "integrity": "sha512-lOtmukMDVvtkL84rJHI7dpTYq+0rli8N2wlnqUcBuDWCfVhRUfOmnR9SsoHFMLpACvEV60dX7rd0rFaYDZI+FA==", "dev": true, "dependencies": { "graceful-fs": "^4.1.15", "hasha": "^3.0.0", "lodash.flattendeep": "^4.4.0", "release-zalgo": "^1.0.0" }, "engines": { "node": ">=6" } }, "node_modules/pako": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", "dev": true }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, "dependencies": { "callsites": "^3.0.0" }, "engines": { "node": ">=6" } }, "node_modules/parents": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parents/-/parents-1.0.1.tgz", "integrity": "sha1-/t1NK/GTp3dF/nHjcdc8MwfZx1E=", "dev": true, "dependencies": { "path-platform": "~0.11.15" } }, "node_modules/parse-asn1": { "version": "5.1.6", "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", "dev": true, "dependencies": { "asn1.js": "^5.2.0", "browserify-aes": "^1.0.0", "evp_bytestokey": "^1.0.0", "pbkdf2": "^3.0.3", "safe-buffer": "^5.1.1" } }, "node_modules/parse-json": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", "dev": true, "dependencies": { "error-ex": "^1.3.1", "json-parse-better-errors": "^1.0.1" }, "engines": { "node": ">=4" } }, "node_modules/path-browserify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", "dev": true }, "node_modules/path-exists": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", "dev": true, "engines": { "node": ">=4" } }, "node_modules/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, "engines": { "node": ">=0.10.0" } }, "node_modules/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 }, "node_modules/path-key": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", "dev": true, "engines": { "node": ">=4" } }, "node_modules/path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, "node_modules/path-platform": { "version": "0.11.15", "resolved": "https://registry.npmjs.org/path-platform/-/path-platform-0.11.15.tgz", "integrity": "sha1-6GQhf3TDaFDwhSt43Hv31KVyG/I=", "dev": true, "engines": { "node": ">= 0.8.0" } }, "node_modules/path-type": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", "dev": true, "dependencies": { "pify": "^3.0.0" }, "engines": { "node": ">=4" } }, "node_modules/path-type/node_modules/pify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", "dev": true, "engines": { "node": ">=4" } }, "node_modules/pathval": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", "dev": true, "engines": { "node": "*" } }, "node_modules/pbkdf2": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", "dev": true, "dependencies": { "create-hash": "^1.1.2", "create-hmac": "^1.1.4", "ripemd160": "^2.0.1", "safe-buffer": "^5.0.1", "sha.js": "^2.4.8" }, "engines": { "node": ">=0.12" } }, "node_modules/picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", "dev": true }, "node_modules/picomatch": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", "dev": true, "engines": { "node": ">=8.6" }, "funding": { "url": "https://github.com/sponsors/jonschlinkert" } }, "node_modules/pify": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", "dev": true, "engines": { "node": ">=6" } }, "node_modules/pirates": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", "dev": true, "dependencies": { "node-modules-regexp": "^1.0.0" }, "engines": { "node": ">= 6" } }, "node_modules/pkg-dir": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", "dev": true, "dependencies": { "find-up": "^3.0.0" }, "engines": { "node": ">=6" } }, "node_modules/pre-commit": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/pre-commit/-/pre-commit-1.2.2.tgz", "integrity": "sha1-287g7p3nI15X95xW186UZBpp7sY=", "dev": true, "hasInstallScript": true, "dependencies": { "cross-spawn": "^5.0.1", "spawn-sync": "^1.0.15", "which": "1.2.x" } }, "node_modules/pre-commit/node_modules/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, "dependencies": { "lru-cache": "^4.0.1", "shebang-command": "^1.2.0", "which": "^1.2.9" } }, "node_modules/pre-commit/node_modules/which": { "version": "1.2.14", "resolved": "https://registry.npmjs.org/which/-/which-1.2.14.tgz", "integrity": "sha1-mofEN48D6CfOyvGs31bHNsAcFOU=", "dev": true, "dependencies": { "isexe": "^2.0.0" }, "bin": { "which": "bin/which" } }, "node_modules/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, "engines": { "node": ">= 0.8.0" } }, "node_modules/process": { "version": "0.11.10", "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", "dev": true, "engines": { "node": ">= 0.6.0" } }, "node_modules/process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, "node_modules/progress": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "dev": true, "engines": { "node": ">=0.4.0" } }, "node_modules/promise-polyfill": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/promise-polyfill/-/promise-polyfill-1.1.6.tgz", "integrity": "sha1-zQTv9G9clcOn0EVZHXm14+AfEtc=", "dev": true }, "node_modules/pseudomap": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", "dev": true }, "node_modules/public-encrypt": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", "dev": true, "dependencies": { "bn.js": "^4.1.0", "browserify-rsa": "^4.0.0", "create-hash": "^1.1.0", "parse-asn1": "^5.0.0", "randombytes": "^2.0.1", "safe-buffer": "^5.1.2" } }, "node_modules/public-encrypt/node_modules/bn.js": { "version": "4.12.0", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", "dev": true }, "node_modules/punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", "dev": true, "engines": { "node": ">=6" } }, "node_modules/querystring": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", "dev": true, "engines": { "node": ">=0.4.x" } }, "node_modules/querystring-es3": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", "dev": true, "engines": { "node": ">=0.4.x" } }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "funding": [ { "type": "github", "url": "https://github.com/sponsors/feross" }, { "type": "patreon", "url": "https://www.patreon.com/feross" }, { "type": "consulting", "url": "https://feross.org/support" } ] }, "node_modules/randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dev": true, "dependencies": { "safe-buffer": "^5.1.0" } }, "node_modules/randomfill": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", "dev": true, "dependencies": { "randombytes": "^2.0.5", "safe-buffer": "^5.1.0" } }, "node_modules/rdf-data-factory": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/rdf-data-factory/-/rdf-data-factory-1.1.1.tgz", "integrity": "sha512-0HoLx7lbBlNd2YTmNKin0txgiYmAV56eVU823at8cG2+iD0Ia5kcRNDpzZy6I/HCtFTymHvTfdhHTzm3ak3Jpw==", "dev": true, "dependencies": { "@rdfjs/types": "*" } }, "node_modules/rdf-isomorphic": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/rdf-isomorphic/-/rdf-isomorphic-1.3.0.tgz", "integrity": "sha512-3BRwUwCNHHR8//bqmVH+knTFVbVfkp7CWyQk7qPHHA8JriXBYxrab21OomjJx/2KF21w8bWz344mgNYEaQABYQ==", "dev": true, "dependencies": { "@rdfjs/types": "*", "hash.js": "^1.1.7", "rdf-string": "^1.6.0", "rdf-terms": "^1.7.0" } }, "node_modules/rdf-js": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/rdf-js/-/rdf-js-4.0.2.tgz", "integrity": "sha512-ApvlFa/WsQh8LpPK/6hctQwG06Z9ztQQGWVtrcrf9L6+sejHNXLPOqL+w7q3hF+iL0C4sv3AX1PUtGkLNzyZ0Q==", "dev": true, "dependencies": { "@rdfjs/types": "*" } }, "node_modules/rdf-literal": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/rdf-literal/-/rdf-literal-1.3.0.tgz", "integrity": "sha512-5u5L4kPYNZANie5AE4gCXqwpNO/p9E/nUcDurk05XAOJT/pt9rQlDk6+BX7j3dNSee3h9GS4xlLoWxQDj7sXtg==", "dev": true, "dependencies": { "@rdfjs/types": "*", "rdf-data-factory": "^1.1.0" } }, "node_modules/rdf-object": { "version": "1.13.1", "resolved": "https://registry.npmjs.org/rdf-object/-/rdf-object-1.13.1.tgz", "integrity": "sha512-Sgq+GbsqdPsMYh+d4OZ4C9brXlzqa9MvfVHG4pkuT9p7o+AX39nqjTWE/8HVaXjjOZBIDe8T54WWTMWphu3BpA==", "dev": true, "dependencies": { "@rdfjs/types": "*", "jsonld-context-parser": "^2.0.2", "rdf-data-factory": "^1.1.0", "rdf-string": "^1.6.0", "streamify-array": "^1.0.1" } }, "node_modules/rdf-quad": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/rdf-quad/-/rdf-quad-1.5.0.tgz", "integrity": "sha512-LnCYx8XbRVW1wr6UiZPSy2Tv7bXAtEwuyck/68dANhFu8VMnGS+QfUNP3b9YI6p4Bfd/fyDx5E3x81IxGV6BzA==", "dev": true, "dependencies": { "rdf-data-factory": "^1.0.1", "rdf-literal": "^1.2.0", "rdf-string": "^1.5.0" } }, "node_modules/rdf-string": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/rdf-string/-/rdf-string-1.6.1.tgz", "integrity": "sha512-EDNVQs9jDgm4hkY8TZLhQI3rYUduecMRxLu3szldAdS2CHEo8aFqlHcZDFgBcaJN2XJWoRJU8YQT85wmb8gPEA==", "dev": true, "dependencies": { "@rdfjs/types": "*", "rdf-data-factory": "^1.1.0" } }, "node_modules/rdf-terms": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/rdf-terms/-/rdf-terms-1.9.0.tgz", "integrity": "sha512-FGMPOIpr6vEN8gWd/dVuPpcE/7k+u4Ufqi8FvM5lczjhduT1MN9Shmrw50fWCpHFVE4n0T3lV0qti1PCaHxAfg==", "dev": true, "dependencies": { "@rdfjs/types": "*", "rdf-data-factory": "^1.1.0", "rdf-string": "^1.6.0" } }, "node_modules/rdf-test-suite": { "version": "1.19.2", "resolved": "https://registry.npmjs.org/rdf-test-suite/-/rdf-test-suite-1.19.2.tgz", "integrity": "sha512-Qvbf05SfcNcvwFzroBVSVf51zS6R74GaQmX43UwXKNxVWMoDyZlgXWLfznDtTJW2HfahnFkTsyosxrliN1zZ1Q==", "dev": true, "dependencies": { "@rdfjs/types": "*", "@types/json-stable-stringify": "^1.0.32", "@types/log-symbols": "^3.0.0", "@types/minimist": "^1.2.0", "@types/n3": "^1.10.3", "@types/sax": "^1.0.1", "arrayify-stream": "^2.0.0", "cross-fetch": "^3.0.6", "is-stream": "^2.0.0", "json-stable-stringify": "^1.0.1", "jsonld-streaming-parser": "^3.0.0", "log-symbols": "^4.0.0", "minimist": "^1.2.0", "n3": "^1.11.1", "rdf-data-factory": "^1.1.0", "rdf-isomorphic": "^1.3.0", "rdf-literal": "^1.3.0", "rdf-object": "^1.11.1", "rdf-quad": "^1.5.0", "rdf-string": "^1.6.0", "rdf-terms": "^1.7.0", "rdfxml-streaming-parser": "^2.0.0", "readable-web-to-node-stream": "^3.0.2", "relative-to-absolute-iri": "^1.0.6", "sparqljson-parse": "^2.0.1", "sparqlxml-parse": "^2.0.1", "stream-to-string": "^1.1.0", "streamify-string": "^1.0.1" }, "bin": { "rdf-test-suite": "bin/Runner.js" } }, "node_modules/rdf-test-suite/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { "color-convert": "^2.0.1" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/rdf-test-suite/node_modules/arrayify-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/arrayify-stream/-/arrayify-stream-2.0.0.tgz", "integrity": "sha512-Z2NRtxpWQIz3NRA2bEZOziIungBH+fpsFFEolc5u8uVRheYitvsDNvejlfyh/hjZ9VyS9Ba62oY0zc5oa6Wu7g==", "dev": true }, "node_modules/rdf-test-suite/node_modules/chalk": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/chalk/chalk?sponsor=1" } }, "node_modules/rdf-test-suite/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "dependencies": { "color-name": "~1.1.4" }, "engines": { "node": ">=7.0.0" } }, "node_modules/rdf-test-suite/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "node_modules/rdf-test-suite/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/rdf-test-suite/node_modules/is-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/rdf-test-suite/node_modules/log-symbols": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dev": true, "dependencies": { "chalk": "^4.1.0", "is-unicode-supported": "^0.1.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/rdf-test-suite/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { "has-flag": "^4.0.0" }, "engines": { "node": ">=8" } }, "node_modules/rdfxml-streaming-parser": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/rdfxml-streaming-parser/-/rdfxml-streaming-parser-2.1.0.tgz", "integrity": "sha512-G2kYXekAy7TUE5G6PAI5/Y/5ugqwFkA+305dcqbnRqqnK+a5gq2ubLGGmxJIIIEFbcFoUZ5UfQRHvqZdsWC8xQ==", "dev": true, "dependencies": { "@rdfjs/types": "*", "@types/readable-stream": "^2.3.13", "buffer": "^6.0.3", "rdf-data-factory": "^1.1.0", "readable-stream": "^4.0.0", "relative-to-absolute-iri": "^1.0.0", "saxes": "^6.0.0" } }, "node_modules/rdfxml-streaming-parser/node_modules/buffer": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", "dev": true, "funding": [ { "type": "github", "url": "https://github.com/sponsors/feross" }, { "type": "patreon", "url": "https://www.patreon.com/feross" }, { "type": "consulting", "url": "https://feross.org/support" } ], "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" } }, "node_modules/read-only-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/read-only-stream/-/read-only-stream-2.0.0.tgz", "integrity": "sha1-JyT9aoET1zdkrCiNQ4YnDB2/F/A=", "dev": true, "dependencies": { "readable-stream": "^2.0.2" } }, "node_modules/read-only-stream/node_modules/readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, "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" } }, "node_modules/read-only-stream/node_modules/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==", "dev": true }, "node_modules/read-only-stream/node_modules/string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "dependencies": { "safe-buffer": "~5.1.0" } }, "node_modules/read-pkg": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", "dev": true, "dependencies": { "load-json-file": "^4.0.0", "normalize-package-data": "^2.3.2", "path-type": "^3.0.0" }, "engines": { "node": ">=4" } }, "node_modules/read-pkg-up": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-4.0.0.tgz", "integrity": "sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA==", "dev": true, "dependencies": { "find-up": "^3.0.0", "read-pkg": "^3.0.0" }, "engines": { "node": ">=6" } }, "node_modules/readable-stream": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.1.0.tgz", "integrity": "sha512-sVisi3+P2lJ2t0BPbpK629j8wRW06yKGJUcaLAGXPAUhyUxVJm7VsCTit1PFgT4JHUDMrGNR+ZjSKpzGaRF3zw==", "dependencies": { "abort-controller": "^3.0.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/readable-web-to-node-stream": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz", "integrity": "sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==", "dev": true, "dependencies": { "readable-stream": "^3.6.0" }, "engines": { "node": ">=8" }, "funding": { "type": "github", "url": "https://github.com/sponsors/Borewit" } }, "node_modules/readable-web-to-node-stream/node_modules/readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "dev": true, "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" }, "engines": { "node": ">= 6" } }, "node_modules/readdirp": { "version": "3.5.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", "dev": true, "dependencies": { "picomatch": "^2.2.1" }, "engines": { "node": ">=8.10.0" } }, "node_modules/regenerate": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", "dev": true }, "node_modules/regenerate-unicode-properties": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-9.0.0.tgz", "integrity": "sha512-3E12UeNSPfjrgwjkR81m5J7Aw/T55Tu7nUyZVQYCKEOs+2dkxEY+DpPtZzO4YruuiPb7NkYLVcyJC4+zCbk5pA==", "dev": true, "dependencies": { "regenerate": "^1.4.2" }, "engines": { "node": ">=4" } }, "node_modules/regenerator-runtime": { "version": "0.13.9", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==", "dev": true }, "node_modules/regenerator-transform": { "version": "0.14.5", "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", "dev": true, "dependencies": { "@babel/runtime": "^7.8.4" } }, "node_modules/regexpp": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", "dev": true, "engines": { "node": ">=6.5.0" } }, "node_modules/regexpu-core": { "version": "4.8.0", "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.8.0.tgz", "integrity": "sha512-1F6bYsoYiz6is+oz70NWur2Vlh9KWtswuRuzJOfeYUrfPX2o8n74AnUVaOGDbUqVGO9fNHu48/pjJO4sNVwsOg==", "dev": true, "dependencies": { "regenerate": "^1.4.2", "regenerate-unicode-properties": "^9.0.0", "regjsgen": "^0.5.2", "regjsparser": "^0.7.0", "unicode-match-property-ecmascript": "^2.0.0", "unicode-match-property-value-ecmascript": "^2.0.0" }, "engines": { "node": ">=4" } }, "node_modules/regjsgen": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==", "dev": true }, "node_modules/regjsparser": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.7.0.tgz", "integrity": "sha512-A4pcaORqmNMDVwUjWoTzuhwMGpP+NykpfqAsEgI1FSH/EzC7lrN5TMd+kN8YCovX+jMpu8eaqXgXPCa0g8FQNQ==", "dev": true, "dependencies": { "jsesc": "~0.5.0" }, "bin": { "regjsparser": "bin/parser" } }, "node_modules/regjsparser/node_modules/jsesc": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", "dev": true, "bin": { "jsesc": "bin/jsesc" } }, "node_modules/relative-to-absolute-iri": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/relative-to-absolute-iri/-/relative-to-absolute-iri-1.0.6.tgz", "integrity": "sha512-Xw5/Zx6iWSCMJUXwXVOjySjH8Xli4hVFL9QQFvkl1qEmFBG94J+QUI9emnoctOCD3285f1jNV+QWV9eDYwIdfQ==", "dev": true }, "node_modules/release-zalgo": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", "integrity": "sha1-CXALflB0Mpc5Mw5TXFqQ+2eFFzA=", "dev": true, "dependencies": { "es6-error": "^4.0.1" }, "engines": { "node": ">=4" } }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/require-main-filename": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", "dev": true }, "node_modules/resolve": { "version": "1.20.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", "dev": true, "dependencies": { "is-core-module": "^2.2.0", "path-parse": "^1.0.6" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true, "engines": { "node": ">=4" } }, "node_modules/restore-cursor": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", "dev": true, "dependencies": { "onetime": "^2.0.0", "signal-exit": "^3.0.2" }, "engines": { "node": ">=4" } }, "node_modules/rimraf": { "version": "2.6.3", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", "dev": true, "dependencies": { "glob": "^7.1.3" }, "bin": { "rimraf": "bin.js" } }, "node_modules/ripemd160": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", "dev": true, "dependencies": { "hash-base": "^3.0.0", "inherits": "^2.0.1" } }, "node_modules/run-async": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", "dev": true, "engines": { "node": ">=0.12.0" } }, "node_modules/rxjs": { "version": "6.6.7", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", "dev": true, "dependencies": { "tslib": "^1.9.0" }, "engines": { "npm": ">=2.0.0" } }, "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "dev": true, "funding": [ { "type": "github", "url": "https://github.com/sponsors/feross" }, { "type": "patreon", "url": "https://www.patreon.com/feross" }, { "type": "consulting", "url": "https://feross.org/support" } ] }, "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true }, "node_modules/saxes": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", "dev": true, "dependencies": { "xmlchars": "^2.2.0" }, "engines": { "node": ">=v12.22.7" } }, "node_modules/semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true, "bin": { "semver": "bin/semver" } }, "node_modules/serialize-javascript": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", "dev": true, "dependencies": { "randombytes": "^2.1.0" } }, "node_modules/set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", "dev": true }, "node_modules/sha.js": { "version": "2.4.11", "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", "dev": true, "dependencies": { "inherits": "^2.0.1", "safe-buffer": "^5.0.1" }, "bin": { "sha.js": "bin.js" } }, "node_modules/shallow-clone": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", "dev": true, "dependencies": { "kind-of": "^6.0.2" }, "engines": { "node": ">=8" } }, "node_modules/shasum-object": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/shasum-object/-/shasum-object-1.0.0.tgz", "integrity": "sha512-Iqo5rp/3xVi6M4YheapzZhhGPVs0yZwHj7wvwQ1B9z8H6zk+FEnI7y3Teq7qwnekfEhu8WmG2z0z4iWZaxLWVg==", "dev": true, "dependencies": { "fast-safe-stringify": "^2.0.7" } }, "node_modules/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, "dependencies": { "shebang-regex": "^1.0.0" }, "engines": { "node": ">=0.10.0" } }, "node_modules/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, "engines": { "node": ">=0.10.0" } }, "node_modules/shell-quote": { "version": "1.7.3", "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.3.tgz", "integrity": "sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==", "dev": true }, "node_modules/side-channel": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", "dev": true, "dependencies": { "call-bind": "^1.0.0", "get-intrinsic": "^1.0.2", "object-inspect": "^1.9.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/signal-exit": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", "dev": true }, "node_modules/simple-concat": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", "dev": true, "funding": [ { "type": "github", "url": "https://github.com/sponsors/feross" }, { "type": "patreon", "url": "https://www.patreon.com/feross" }, { "type": "consulting", "url": "https://feross.org/support" } ] }, "node_modules/slash": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", "dev": true, "engines": { "node": ">=6" } }, "node_modules/slice-ansi": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", "dev": true, "dependencies": { "ansi-styles": "^3.2.0", "astral-regex": "^1.0.0", "is-fullwidth-code-point": "^2.0.0" }, "engines": { "node": ">=6" } }, "node_modules/source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/source-map-support": { "version": "0.5.19", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", "dev": true, "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" } }, "node_modules/source-map-support/node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/sparqljson-parse": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/sparqljson-parse/-/sparqljson-parse-2.1.0.tgz", "integrity": "sha512-JKyoDNDR9xrJwR6x6N41UWfER6kfeirE9BRBHdSFSfQF3eF3pxpuUTcJ6QGwHQ4wC/JsQdG/4OGmzkuk1B+8gg==", "dev": true, "dependencies": { "@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" } }, "node_modules/sparqljson-parse/node_modules/buffer": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", "dev": true, "funding": [ { "type": "github", "url": "https://github.com/sponsors/feross" }, { "type": "patreon", "url": "https://www.patreon.com/feross" }, { "type": "consulting", "url": "https://feross.org/support" } ], "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" } }, "node_modules/sparqlxml-parse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/sparqlxml-parse/-/sparqlxml-parse-2.0.1.tgz", "integrity": "sha512-7HZMm0l9a+NQW6mEHzur+KEXA2/gpLYsyiq9yMLKa7Us8yfUJG/+fbHmuBoN7yE0t41SfCXtq4EU/nDjFSGudw==", "dev": true, "dependencies": { "@rdfjs/types": "*", "@types/readable-stream": "^2.3.13", "buffer": "^6.0.3", "rdf-data-factory": "^1.1.0", "readable-stream": "^4.0.0", "saxes": "^6.0.0" } }, "node_modules/sparqlxml-parse/node_modules/buffer": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", "dev": true, "funding": [ { "type": "github", "url": "https://github.com/sponsors/feross" }, { "type": "patreon", "url": "https://www.patreon.com/feross" }, { "type": "consulting", "url": "https://feross.org/support" } ], "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" } }, "node_modules/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, "hasInstallScript": true, "dependencies": { "concat-stream": "^1.4.7", "os-shim": "^0.1.2" } }, "node_modules/spawn-wrap": { "version": "1.4.3", "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-1.4.3.tgz", "integrity": "sha512-IgB8md0QW/+tWqcavuFgKYR/qIRvJkRLPJDFaoXtLLUaVcCDK0+HeFTkmQHj3eprcYhc+gOl0aEA1w7qZlYezw==", "dev": true, "dependencies": { "foreground-child": "^1.5.6", "mkdirp": "^0.5.0", "os-homedir": "^1.0.1", "rimraf": "^2.6.2", "signal-exit": "^3.0.2", "which": "^1.3.0" } }, "node_modules/spdx-correct": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", "dev": true, "dependencies": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" } }, "node_modules/spdx-exceptions": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", "dev": true }, "node_modules/spdx-expression-parse": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", "dev": true, "dependencies": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" } }, "node_modules/spdx-license-ids": { "version": "3.0.9", "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.9.tgz", "integrity": "sha512-Ki212dKK4ogX+xDo4CtOZBVIwhsKBEfsEEcwmJfLQzirgc2jIWdzg40Unxz/HzEUqM1WFzVlQSMF9kZZ2HboLQ==", "dev": true }, "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "dev": true }, "node_modules/stream-browserify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz", "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==", "dev": true, "dependencies": { "inherits": "~2.0.4", "readable-stream": "^3.5.0" } }, "node_modules/stream-browserify/node_modules/readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "dev": true, "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" }, "engines": { "node": ">= 6" } }, "node_modules/stream-combiner2": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz", "integrity": "sha1-+02KFCDqNidk4hrUeAOXvry0HL4=", "dev": true, "dependencies": { "duplexer2": "~0.1.0", "readable-stream": "^2.0.2" } }, "node_modules/stream-combiner2/node_modules/readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, "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" } }, "node_modules/stream-combiner2/node_modules/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==", "dev": true }, "node_modules/stream-combiner2/node_modules/string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "dependencies": { "safe-buffer": "~5.1.0" } }, "node_modules/stream-http": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-3.2.0.tgz", "integrity": "sha512-Oq1bLqisTyK3TSCXpPbT4sdeYNdmyZJv1LxpEm2vu1ZhK89kSE5YXwZc3cWk0MagGaKriBh9mCFbVGtO+vY29A==", "dev": true, "dependencies": { "builtin-status-codes": "^3.0.0", "inherits": "^2.0.4", "readable-stream": "^3.6.0", "xtend": "^4.0.2" } }, "node_modules/stream-http/node_modules/readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "dev": true, "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" }, "engines": { "node": ">= 6" } }, "node_modules/stream-splicer": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/stream-splicer/-/stream-splicer-2.0.1.tgz", "integrity": "sha512-Xizh4/NPuYSyAXyT7g8IvdJ9HJpxIGL9PjyhtywCZvvP0OPIdqyrr4dMikeuvY8xahpdKEBlBTySe583totajg==", "dev": true, "dependencies": { "inherits": "^2.0.1", "readable-stream": "^2.0.2" } }, "node_modules/stream-splicer/node_modules/readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, "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" } }, "node_modules/stream-splicer/node_modules/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==", "dev": true }, "node_modules/stream-splicer/node_modules/string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "dependencies": { "safe-buffer": "~5.1.0" } }, "node_modules/stream-to-string": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/stream-to-string/-/stream-to-string-1.2.0.tgz", "integrity": "sha512-8drZlFIKBHSMdX9GCWv8V9AAWnQcTqw0iAI6/GC7UJ0H0SwKeFKjOoZfGY1tOU00GGU7FYZQoJ/ZCUEoXhD7yQ==", "dev": true, "dependencies": { "promise-polyfill": "^1.1.6" } }, "node_modules/streamify-array": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/streamify-array/-/streamify-array-1.0.1.tgz", "integrity": "sha512-ZnswaBcC6B1bhPLSQOlC6CdaDUSzU0wr2lvvHpbHNms8V7+DLd8uEAzDAWpsjxbFkijBHhuObFO/qqu52DZUMA==", "dev": true }, "node_modules/streamify-string": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/streamify-string/-/streamify-string-1.0.1.tgz", "integrity": "sha1-niIN4z4cR13TDgIG9bGBXMbJUls=", "dev": true }, "node_modules/string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "dev": true, "dependencies": { "safe-buffer": "~5.2.0" } }, "node_modules/string-width": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, "dependencies": { "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^4.0.0" }, "engines": { "node": ">=4" } }, "node_modules/string.prototype.trimend": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.trimstart": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/strip-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "dependencies": { "ansi-regex": "^3.0.0" }, "engines": { "node": ">=4" } }, "node_modules/strip-bom": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", "dev": true, "engines": { "node": ">=4" } }, "node_modules/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, "engines": { "node": ">=0.10.0" } }, "node_modules/subarg": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/subarg/-/subarg-1.0.0.tgz", "integrity": "sha1-9izxdYHplrSPyWVpn1TAauJouNI=", "dev": true, "dependencies": { "minimist": "^1.1.0" } }, "node_modules/supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "dependencies": { "has-flag": "^3.0.0" }, "engines": { "node": ">=4" } }, "node_modules/syntax-error": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-1.4.0.tgz", "integrity": "sha512-YPPlu67mdnHGTup2A8ff7BC2Pjq0e0Yp/IyTFN03zWO0RcK07uLcbi7C2KpGR2FvWbaB0+bfE27a+sBKebSo7w==", "dev": true, "dependencies": { "acorn-node": "^1.2.0" } }, "node_modules/table": { "version": "5.4.6", "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", "dev": true, "dependencies": { "ajv": "^6.10.2", "lodash": "^4.17.14", "slice-ansi": "^2.1.0", "string-width": "^3.0.0" }, "engines": { "node": ">=6.0.0" } }, "node_modules/table/node_modules/ansi-regex": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", "dev": true, "engines": { "node": ">=6" } }, "node_modules/table/node_modules/string-width": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", "dev": true, "dependencies": { "emoji-regex": "^7.0.1", "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^5.1.0" }, "engines": { "node": ">=6" } }, "node_modules/table/node_modules/strip-ansi": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dev": true, "dependencies": { "ansi-regex": "^4.1.0" }, "engines": { "node": ">=6" } }, "node_modules/test-exclude": { "version": "5.2.3", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-5.2.3.tgz", "integrity": "sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g==", "dev": true, "dependencies": { "glob": "^7.1.3", "minimatch": "^3.0.4", "read-pkg-up": "^4.0.0", "require-main-filename": "^2.0.0" }, "engines": { "node": ">=6" } }, "node_modules/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 }, "node_modules/through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", "dev": true }, "node_modules/through2": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", "dev": true, "dependencies": { "readable-stream": "~2.3.6", "xtend": "~4.0.1" } }, "node_modules/through2/node_modules/readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, "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" } }, "node_modules/through2/node_modules/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==", "dev": true }, "node_modules/through2/node_modules/string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "dependencies": { "safe-buffer": "~5.1.0" } }, "node_modules/timers-browserify": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-1.4.2.tgz", "integrity": "sha1-ycWLV1voQHN1y14kYtrO50NZ9B0=", "dev": true, "dependencies": { "process": "~0.11.0" }, "engines": { "node": ">=0.6.0" } }, "node_modules/tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", "dev": true, "dependencies": { "os-tmpdir": "~1.0.2" }, "engines": { "node": ">=0.6.0" } }, "node_modules/to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", "dev": true, "engines": { "node": ">=4" } }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, "dependencies": { "is-number": "^7.0.0" }, "engines": { "node": ">=8.0" } }, "node_modules/tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", "dev": true }, "node_modules/tslib": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true }, "node_modules/tty-browserify": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz", "integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==", "dev": true }, "node_modules/type-check": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", "dev": true, "dependencies": { "prelude-ls": "~1.1.2" }, "engines": { "node": ">= 0.8.0" } }, "node_modules/type-detect": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true, "engines": { "node": ">=4" } }, "node_modules/typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", "dev": true }, "node_modules/uglify-js": { "version": "3.14.4", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.14.4.tgz", "integrity": "sha512-AbiSR44J0GoCeV81+oxcy/jDOElO2Bx3d0MfQCUShq7JRXaM4KtQopZsq2vFv8bCq2yMaGrw1FgygUd03RyRDA==", "dev": true, "bin": { "uglifyjs": "bin/uglifyjs" }, "engines": { "node": ">=0.8.0" } }, "node_modules/umd": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/umd/-/umd-3.0.3.tgz", "integrity": "sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow==", "dev": true, "bin": { "umd": "bin/cli.js" } }, "node_modules/unbox-primitive": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", "dev": true, "dependencies": { "function-bind": "^1.1.1", "has-bigints": "^1.0.1", "has-symbols": "^1.0.2", "which-boxed-primitive": "^1.0.2" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/undeclared-identifiers": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/undeclared-identifiers/-/undeclared-identifiers-1.1.3.tgz", "integrity": "sha512-pJOW4nxjlmfwKApE4zvxLScM/njmwj/DiUBv7EabwE4O8kRUy+HIwxQtZLBPll/jx1LJyBcqNfB3/cpv9EZwOw==", "dev": true, "dependencies": { "acorn-node": "^1.3.0", "dash-ast": "^1.0.0", "get-assigned-identifiers": "^1.2.0", "simple-concat": "^1.0.0", "xtend": "^4.0.1" }, "bin": { "undeclared-identifiers": "bin.js" } }, "node_modules/underscore": { "version": "1.13.1", "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.1.tgz", "integrity": "sha512-hzSoAVtJF+3ZtiFX0VgfFPHEDRm7Y/QPjGyNo4TVdnDTdft3tr8hEkD25a1jC+TjTuE7tkHGKkhwCgs9dgBB2g==", "dev": true }, "node_modules/unicode-canonical-property-names-ecmascript": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", "dev": true, "engines": { "node": ">=4" } }, "node_modules/unicode-match-property-ecmascript": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", "dev": true, "dependencies": { "unicode-canonical-property-names-ecmascript": "^2.0.0", "unicode-property-aliases-ecmascript": "^2.0.0" }, "engines": { "node": ">=4" } }, "node_modules/unicode-match-property-value-ecmascript": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz", "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==", "dev": true, "engines": { "node": ">=4" } }, "node_modules/unicode-property-aliases-ecmascript": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz", "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==", "dev": true, "engines": { "node": ">=4" } }, "node_modules/universalify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", "dev": true, "engines": { "node": ">= 10.0.0" } }, "node_modules/uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, "dependencies": { "punycode": "^2.1.0" } }, "node_modules/url": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", "dev": true, "dependencies": { "punycode": "1.3.2", "querystring": "0.2.0" } }, "node_modules/url/node_modules/punycode": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", "dev": true }, "node_modules/util": { "version": "0.12.4", "resolved": "https://registry.npmjs.org/util/-/util-0.12.4.tgz", "integrity": "sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw==", "dev": true, "dependencies": { "inherits": "^2.0.3", "is-arguments": "^1.0.4", "is-generator-function": "^1.0.7", "is-typed-array": "^1.1.3", "safe-buffer": "^5.1.2", "which-typed-array": "^1.1.2" } }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", "dev": true }, "node_modules/uuid": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", "dev": true, "bin": { "uuid": "bin/uuid" } }, "node_modules/validate-npm-package-license": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, "dependencies": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" } }, "node_modules/vm-browserify": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", "dev": true }, "node_modules/webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", "dev": true }, "node_modules/whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", "dev": true, "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" } }, "node_modules/which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, "dependencies": { "isexe": "^2.0.0" }, "bin": { "which": "bin/which" } }, "node_modules/which-boxed-primitive": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", "dev": true, "dependencies": { "is-bigint": "^1.0.1", "is-boolean-object": "^1.1.0", "is-number-object": "^1.0.4", "is-string": "^1.0.5", "is-symbol": "^1.0.3" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/which-module": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", "dev": true }, "node_modules/which-typed-array": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.7.tgz", "integrity": "sha512-vjxaB4nfDqwKI0ws7wZpxIlde1XrLX5uB0ZjpfshgmapJMD7jJWhZI+yToJTqaFByF0eNBcYxbjmCzoRP7CfEw==", "dev": true, "dependencies": { "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", "es-abstract": "^1.18.5", "foreach": "^2.0.5", "has-tostringtag": "^1.0.0", "is-typed-array": "^1.1.7" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/wide-align": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", "dev": true, "dependencies": { "string-width": "^1.0.2 || 2" } }, "node_modules/word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/workerpool": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.0.tgz", "integrity": "sha512-toV7q9rWNYha963Pl/qyeZ6wG+3nnsyvolaNUS8+R5Wtw6qJPTxIlOP1ZSvcGhEJw+l3HMMmtiNo9Gl61G4GVg==", "dev": true }, "node_modules/wrap-ansi": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", "dev": true, "dependencies": { "ansi-styles": "^3.2.0", "string-width": "^3.0.0", "strip-ansi": "^5.0.0" }, "engines": { "node": ">=6" } }, "node_modules/wrap-ansi/node_modules/ansi-regex": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", "dev": true, "engines": { "node": ">=6" } }, "node_modules/wrap-ansi/node_modules/string-width": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", "dev": true, "dependencies": { "emoji-regex": "^7.0.1", "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^5.1.0" }, "engines": { "node": ">=6" } }, "node_modules/wrap-ansi/node_modules/strip-ansi": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dev": true, "dependencies": { "ansi-regex": "^4.1.0" }, "engines": { "node": ">=6" } }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true }, "node_modules/write": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", "dev": true, "dependencies": { "mkdirp": "^0.5.1" }, "engines": { "node": ">=4" } }, "node_modules/write-file-atomic": { "version": "2.4.3", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", "dev": true, "dependencies": { "graceful-fs": "^4.1.11", "imurmurhash": "^0.1.4", "signal-exit": "^3.0.2" } }, "node_modules/xmlchars": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", "dev": true }, "node_modules/xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", "dev": true, "engines": { "node": ">=0.4" } }, "node_modules/y18n": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", "dev": true }, "node_modules/yallist": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", "dev": true }, "node_modules/yargs": { "version": "13.3.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", "dev": true, "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" } }, "node_modules/yargs-parser": { "version": "13.1.2", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", "dev": true, "dependencies": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" } }, "node_modules/yargs-unparser": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", "dev": true, "dependencies": { "camelcase": "^6.0.0", "decamelize": "^4.0.0", "flat": "^5.0.2", "is-plain-obj": "^2.1.0" }, "engines": { "node": ">=10" } }, "node_modules/yargs-unparser/node_modules/camelcase": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/yargs-unparser/node_modules/decamelize": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", "dev": true, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/yargs/node_modules/ansi-regex": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", "dev": true, "engines": { "node": ">=6" } }, "node_modules/yargs/node_modules/string-width": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", "dev": true, "dependencies": { "emoji-regex": "^7.0.1", "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^5.1.0" }, "engines": { "node": ">=6" } }, "node_modules/yargs/node_modules/strip-ansi": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dev": true, "dependencies": { "ansi-regex": "^4.1.0" }, "engines": { "node": ">=6" } }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } } }, "dependencies": { "@babel/cli": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.16.0.tgz", "integrity": "sha512-WLrM42vKX/4atIoQB+eb0ovUof53UUvecb4qGjU2PDDWRiZr50ZpiV8NpcLo7iSxeGYrRG0Mqembsa+UrTAV6Q==", "dev": true, "requires": { "@nicolo-ribaudo/chokidar-2": "2.1.8-no-fsevents.3", "chokidar": "^3.4.0", "commander": "^4.0.1", "convert-source-map": "^1.1.0", "fs-readdir-recursive": "^1.1.0", "glob": "^7.0.0", "make-dir": "^2.1.0", "slash": "^2.0.0", "source-map": "^0.5.0" } }, "@babel/code-frame": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.0.tgz", "integrity": "sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA==", "dev": true, "requires": { "@babel/highlight": "^7.16.0" } }, "@babel/compat-data": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.16.0.tgz", "integrity": "sha512-DGjt2QZse5SGd9nfOSqO4WLJ8NN/oHkijbXbPrxuoJO3oIPJL3TciZs9FX+cOHNiY9E9l0opL8g7BmLe3T+9ew==", "dev": true }, "@babel/core": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.16.0.tgz", "integrity": "sha512-mYZEvshBRHGsIAiyH5PzCFTCfbWfoYbO/jcSdXQSUQu1/pW0xDZAUP7KEc32heqWTAfAHhV9j1vH8Sav7l+JNQ==", "dev": true, "requires": { "@babel/code-frame": "^7.16.0", "@babel/generator": "^7.16.0", "@babel/helper-compilation-targets": "^7.16.0", "@babel/helper-module-transforms": "^7.16.0", "@babel/helpers": "^7.16.0", "@babel/parser": "^7.16.0", "@babel/template": "^7.16.0", "@babel/traverse": "^7.16.0", "@babel/types": "^7.16.0", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.1.2", "semver": "^6.3.0", "source-map": "^0.5.0" }, "dependencies": { "debug": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", "dev": true, "requires": { "ms": "2.1.2" } }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true } } }, "@babel/generator": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.0.tgz", "integrity": "sha512-RR8hUCfRQn9j9RPKEVXo9LiwoxLPYn6hNZlvUOR8tSnaxlD0p0+la00ZP9/SnRt6HchKr+X0fO2r8vrETiJGew==", "dev": true, "requires": { "@babel/types": "^7.16.0", "jsesc": "^2.5.1", "source-map": "^0.5.0" } }, "@babel/helper-annotate-as-pure": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.0.tgz", "integrity": "sha512-ItmYF9vR4zA8cByDocY05o0LGUkp1zhbTQOH1NFyl5xXEqlTJQCEJjieriw+aFpxo16swMxUnUiKS7a/r4vtHg==", "dev": true, "requires": { "@babel/types": "^7.16.0" } }, "@babel/helper-builder-binary-assignment-operator-visitor": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.0.tgz", "integrity": "sha512-9KuleLT0e77wFUku6TUkqZzCEymBdtuQQ27MhEKzf9UOOJu3cYj98kyaDAzxpC7lV6DGiZFuC8XqDsq8/Kl6aQ==", "dev": true, "requires": { "@babel/helper-explode-assignable-expression": "^7.16.0", "@babel/types": "^7.16.0" } }, "@babel/helper-compilation-targets": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.0.tgz", "integrity": "sha512-S7iaOT1SYlqK0sQaCi21RX4+13hmdmnxIEAnQUB/eh7GeAnRjOUgTYpLkUOiRXzD+yog1JxP0qyAQZ7ZxVxLVg==", "dev": true, "requires": { "@babel/compat-data": "^7.16.0", "@babel/helper-validator-option": "^7.14.5", "browserslist": "^4.16.6", "semver": "^6.3.0" }, "dependencies": { "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true } } }, "@babel/helper-create-class-features-plugin": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.16.0.tgz", "integrity": "sha512-XLwWvqEaq19zFlF5PTgOod4bUA+XbkR4WLQBct1bkzmxJGB0ZEJaoKF4c8cgH9oBtCDuYJ8BP5NB9uFiEgO5QA==", "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.16.0", "@babel/helper-function-name": "^7.16.0", "@babel/helper-member-expression-to-functions": "^7.16.0", "@babel/helper-optimise-call-expression": "^7.16.0", "@babel/helper-replace-supers": "^7.16.0", "@babel/helper-split-export-declaration": "^7.16.0" } }, "@babel/helper-create-regexp-features-plugin": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.16.0.tgz", "integrity": "sha512-3DyG0zAFAZKcOp7aVr33ddwkxJ0Z0Jr5V99y3I690eYLpukJsJvAbzTy1ewoCqsML8SbIrjH14Jc/nSQ4TvNPA==", "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.16.0", "regexpu-core": "^4.7.1" } }, "@babel/helper-define-polyfill-provider": { "version": "0.2.4", "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.4.tgz", "integrity": "sha512-OrpPZ97s+aPi6h2n1OXzdhVis1SGSsMU2aMHgLcOKfsp4/v1NWpx3CWT3lBj5eeBq9cDkPkh+YCfdF7O12uNDQ==", "dev": true, "requires": { "@babel/helper-compilation-targets": "^7.13.0", "@babel/helper-module-imports": "^7.12.13", "@babel/helper-plugin-utils": "^7.13.0", "@babel/traverse": "^7.13.0", "debug": "^4.1.1", "lodash.debounce": "^4.0.8", "resolve": "^1.14.2", "semver": "^6.1.2" }, "dependencies": { "debug": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", "dev": true, "requires": { "ms": "2.1.2" } }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true } } }, "@babel/helper-explode-assignable-expression": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.0.tgz", "integrity": "sha512-Hk2SLxC9ZbcOhLpg/yMznzJ11W++lg5GMbxt1ev6TXUiJB0N42KPC+7w8a+eWGuqDnUYuwStJoZHM7RgmIOaGQ==", "dev": true, "requires": { "@babel/types": "^7.16.0" } }, "@babel/helper-function-name": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.0.tgz", "integrity": "sha512-BZh4mEk1xi2h4HFjWUXRQX5AEx4rvaZxHgax9gcjdLWdkjsY7MKt5p0otjsg5noXw+pB+clMCjw+aEVYADMjog==", "dev": true, "requires": { "@babel/helper-get-function-arity": "^7.16.0", "@babel/template": "^7.16.0", "@babel/types": "^7.16.0" } }, "@babel/helper-get-function-arity": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.0.tgz", "integrity": "sha512-ASCquNcywC1NkYh/z7Cgp3w31YW8aojjYIlNg4VeJiHkqyP4AzIvr4qx7pYDb4/s8YcsZWqqOSxgkvjUz1kpDQ==", "dev": true, "requires": { "@babel/types": "^7.16.0" } }, "@babel/helper-hoist-variables": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.0.tgz", "integrity": "sha512-1AZlpazjUR0EQZQv3sgRNfM9mEVWPK3M6vlalczA+EECcPz3XPh6VplbErL5UoMpChhSck5wAJHthlj1bYpcmg==", "dev": true, "requires": { "@babel/types": "^7.16.0" } }, "@babel/helper-member-expression-to-functions": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.0.tgz", "integrity": "sha512-bsjlBFPuWT6IWhl28EdrQ+gTvSvj5tqVP5Xeftp07SEuz5pLnsXZuDkDD3Rfcxy0IsHmbZ+7B2/9SHzxO0T+sQ==", "dev": true, "requires": { "@babel/types": "^7.16.0" } }, "@babel/helper-module-imports": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.0.tgz", "integrity": "sha512-kkH7sWzKPq0xt3H1n+ghb4xEMP8k0U7XV3kkB+ZGy69kDk2ySFW1qPi06sjKzFY3t1j6XbJSqr4mF9L7CYVyhg==", "dev": true, "requires": { "@babel/types": "^7.16.0" } }, "@babel/helper-module-transforms": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.0.tgz", "integrity": "sha512-My4cr9ATcaBbmaEa8M0dZNA74cfI6gitvUAskgDtAFmAqyFKDSHQo5YstxPbN+lzHl2D9l/YOEFqb2mtUh4gfA==", "dev": true, "requires": { "@babel/helper-module-imports": "^7.16.0", "@babel/helper-replace-supers": "^7.16.0", "@babel/helper-simple-access": "^7.16.0", "@babel/helper-split-export-declaration": "^7.16.0", "@babel/helper-validator-identifier": "^7.15.7", "@babel/template": "^7.16.0", "@babel/traverse": "^7.16.0", "@babel/types": "^7.16.0" } }, "@babel/helper-optimise-call-expression": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.0.tgz", "integrity": "sha512-SuI467Gi2V8fkofm2JPnZzB/SUuXoJA5zXe/xzyPP2M04686RzFKFHPK6HDVN6JvWBIEW8tt9hPR7fXdn2Lgpw==", "dev": true, "requires": { "@babel/types": "^7.16.0" } }, "@babel/helper-plugin-utils": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", "dev": true }, "@babel/helper-remap-async-to-generator": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.0.tgz", "integrity": "sha512-MLM1IOMe9aQBqMWxcRw8dcb9jlM86NIw7KA0Wri91Xkfied+dE0QuBFSBjMNvqzmS0OSIDsMNC24dBEkPUi7ew==", "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.16.0", "@babel/helper-wrap-function": "^7.16.0", "@babel/types": "^7.16.0" } }, "@babel/helper-replace-supers": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.0.tgz", "integrity": "sha512-TQxuQfSCdoha7cpRNJvfaYxxxzmbxXw/+6cS7V02eeDYyhxderSoMVALvwupA54/pZcOTtVeJ0xccp1nGWladA==", "dev": true, "requires": { "@babel/helper-member-expression-to-functions": "^7.16.0", "@babel/helper-optimise-call-expression": "^7.16.0", "@babel/traverse": "^7.16.0", "@babel/types": "^7.16.0" } }, "@babel/helper-simple-access": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.0.tgz", "integrity": "sha512-o1rjBT/gppAqKsYfUdfHq5Rk03lMQrkPHG1OWzHWpLgVXRH4HnMM9Et9CVdIqwkCQlobnGHEJMsgWP/jE1zUiw==", "dev": true, "requires": { "@babel/types": "^7.16.0" } }, "@babel/helper-skip-transparent-expression-wrappers": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz", "integrity": "sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw==", "dev": true, "requires": { "@babel/types": "^7.16.0" } }, "@babel/helper-split-export-declaration": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.0.tgz", "integrity": "sha512-0YMMRpuDFNGTHNRiiqJX19GjNXA4H0E8jZ2ibccfSxaCogbm3am5WN/2nQNj0YnQwGWM1J06GOcQ2qnh3+0paw==", "dev": true, "requires": { "@babel/types": "^7.16.0" } }, "@babel/helper-validator-identifier": { "version": "7.15.7", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz", "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==", "dev": true }, "@babel/helper-validator-option": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==", "dev": true }, "@babel/helper-wrap-function": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.16.0.tgz", "integrity": "sha512-VVMGzYY3vkWgCJML+qVLvGIam902mJW0FvT7Avj1zEe0Gn7D93aWdLblYARTxEw+6DhZmtzhBM2zv0ekE5zg1g==", "dev": true, "requires": { "@babel/helper-function-name": "^7.16.0", "@babel/template": "^7.16.0", "@babel/traverse": "^7.16.0", "@babel/types": "^7.16.0" } }, "@babel/helpers": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.16.0.tgz", "integrity": "sha512-dVRM0StFMdKlkt7cVcGgwD8UMaBfWJHl3A83Yfs8GQ3MO0LHIIIMvK7Fa0RGOGUQ10qikLaX6D7o5htcQWgTMQ==", "dev": true, "requires": { "@babel/template": "^7.16.0", "@babel/traverse": "^7.16.0", "@babel/types": "^7.16.0" } }, "@babel/highlight": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.0.tgz", "integrity": "sha512-t8MH41kUQylBtu2+4IQA3atqevA2lRgqA2wyVB/YiWmsDSuylZZuXOUy9ric30hfzauEFfdsuk/eXTRrGrfd0g==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.15.7", "chalk": "^2.0.0", "js-tokens": "^4.0.0" } }, "@babel/parser": { "version": "7.16.2", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.2.tgz", "integrity": "sha512-RUVpT0G2h6rOZwqLDTrKk7ksNv7YpAilTnYe1/Q+eDjxEceRMKVWbCsX7t8h6C1qCFi/1Y8WZjcEPBAFG27GPw==", "dev": true }, "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { "version": "7.16.2", "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.16.2.tgz", "integrity": "sha512-h37CvpLSf8gb2lIJ2CgC3t+EjFbi0t8qS7LCS1xcJIlEXE4czlofwaW7W1HA8zpgOCzI9C1nmoqNR1zWkk0pQg==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.16.0.tgz", "integrity": "sha512-4tcFwwicpWTrpl9qjf7UsoosaArgImF85AxqCRZlgc3IQDvkUHjJpruXAL58Wmj+T6fypWTC/BakfEkwIL/pwA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.14.5", "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", "@babel/plugin-proposal-optional-chaining": "^7.16.0" } }, "@babel/plugin-proposal-async-generator-functions": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.0.tgz", "integrity": "sha512-nyYmIo7ZqKsY6P4lnVmBlxp9B3a96CscbLotlsNuktMHahkDwoPYEjXrZHU0Tj844Z9f1IthVxQln57mhkcExw==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.14.5", "@babel/helper-remap-async-to-generator": "^7.16.0", "@babel/plugin-syntax-async-generators": "^7.8.4" } }, "@babel/plugin-proposal-class-properties": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.0.tgz", "integrity": "sha512-mCF3HcuZSY9Fcx56Lbn+CGdT44ioBMMvjNVldpKtj8tpniETdLjnxdHI1+sDWXIM1nNt+EanJOZ3IG9lzVjs7A==", "dev": true, "requires": { "@babel/helper-create-class-features-plugin": "^7.16.0", "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-proposal-class-static-block": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.16.0.tgz", "integrity": "sha512-mAy3sdcY9sKAkf3lQbDiv3olOfiLqI51c9DR9b19uMoR2Z6r5pmGl7dfNFqEvqOyqbf1ta4lknK4gc5PJn3mfA==", "dev": true, "requires": { "@babel/helper-create-class-features-plugin": "^7.16.0", "@babel/helper-plugin-utils": "^7.14.5", "@babel/plugin-syntax-class-static-block": "^7.14.5" } }, "@babel/plugin-proposal-dynamic-import": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.0.tgz", "integrity": "sha512-QGSA6ExWk95jFQgwz5GQ2Dr95cf7eI7TKutIXXTb7B1gCLTCz5hTjFTQGfLFBBiC5WSNi7udNwWsqbbMh1c4yQ==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.14.5", "@babel/plugin-syntax-dynamic-import": "^7.8.3" } }, "@babel/plugin-proposal-export-namespace-from": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.16.0.tgz", "integrity": "sha512-CjI4nxM/D+5wCnhD11MHB1AwRSAYeDT+h8gCdcVJZ/OK7+wRzFsf7PFPWVpVpNRkHMmMkQWAHpTq+15IXQ1diA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.14.5", "@babel/plugin-syntax-export-namespace-from": "^7.8.3" } }, "@babel/plugin-proposal-json-strings": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.16.0.tgz", "integrity": "sha512-kouIPuiv8mSi5JkEhzApg5Gn6hFyKPnlkO0a9YSzqRurH8wYzSlf6RJdzluAsbqecdW5pBvDJDfyDIUR/vLxvg==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.14.5", "@babel/plugin-syntax-json-strings": "^7.8.3" } }, "@babel/plugin-proposal-logical-assignment-operators": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.16.0.tgz", "integrity": "sha512-pbW0fE30sVTYXXm9lpVQQ/Vc+iTeQKiXlaNRZPPN2A2VdlWyAtsUrsQ3xydSlDW00TFMK7a8m3cDTkBF5WnV3Q==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.14.5", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" } }, "@babel/plugin-proposal-nullish-coalescing-operator": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.0.tgz", "integrity": "sha512-3bnHA8CAFm7cG93v8loghDYyQ8r97Qydf63BeYiGgYbjKKB/XP53W15wfRC7dvKfoiJ34f6Rbyyx2btExc8XsQ==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.14.5", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" } }, "@babel/plugin-proposal-numeric-separator": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.0.tgz", "integrity": "sha512-FAhE2I6mjispy+vwwd6xWPyEx3NYFS13pikDBWUAFGZvq6POGs5eNchw8+1CYoEgBl9n11I3NkzD7ghn25PQ9Q==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.14.5", "@babel/plugin-syntax-numeric-separator": "^7.10.4" } }, "@babel/plugin-proposal-object-rest-spread": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.16.0.tgz", "integrity": "sha512-LU/+jp89efe5HuWJLmMmFG0+xbz+I2rSI7iLc1AlaeSMDMOGzWlc5yJrMN1d04osXN4sSfpo4O+azkBNBes0jg==", "dev": true, "requires": { "@babel/compat-data": "^7.16.0", "@babel/helper-compilation-targets": "^7.16.0", "@babel/helper-plugin-utils": "^7.14.5", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", "@babel/plugin-transform-parameters": "^7.16.0" } }, "@babel/plugin-proposal-optional-catch-binding": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.0.tgz", "integrity": "sha512-kicDo0A/5J0nrsCPbn89mTG3Bm4XgYi0CZtvex9Oyw7gGZE3HXGD0zpQNH+mo+tEfbo8wbmMvJftOwpmPy7aVw==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.14.5", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" } }, "@babel/plugin-proposal-optional-chaining": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.0.tgz", "integrity": "sha512-Y4rFpkZODfHrVo70Uaj6cC1JJOt3Pp0MdWSwIKtb8z1/lsjl9AmnB7ErRFV+QNGIfcY1Eruc2UMx5KaRnXjMyg==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.14.5", "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", "@babel/plugin-syntax-optional-chaining": "^7.8.3" } }, "@babel/plugin-proposal-private-methods": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.0.tgz", "integrity": "sha512-IvHmcTHDFztQGnn6aWq4t12QaBXTKr1whF/dgp9kz84X6GUcwq9utj7z2wFCUfeOup/QKnOlt2k0zxkGFx9ubg==", "dev": true, "requires": { "@babel/helper-create-class-features-plugin": "^7.16.0", "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-proposal-private-property-in-object": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.16.0.tgz", "integrity": "sha512-3jQUr/HBbMVZmi72LpjQwlZ55i1queL8KcDTQEkAHihttJnAPrcvG9ZNXIfsd2ugpizZo595egYV6xy+pv4Ofw==", "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.16.0", "@babel/helper-create-class-features-plugin": "^7.16.0", "@babel/helper-plugin-utils": "^7.14.5", "@babel/plugin-syntax-private-property-in-object": "^7.14.5" } }, "@babel/plugin-proposal-unicode-property-regex": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.16.0.tgz", "integrity": "sha512-ti7IdM54NXv29cA4+bNNKEMS4jLMCbJgl+Drv+FgYy0erJLAxNAIXcNjNjrRZEcWq0xJHsNVwQezskMFpF8N9g==", "dev": true, "requires": { "@babel/helper-create-regexp-features-plugin": "^7.16.0", "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-syntax-async-generators": { "version": "7.8.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-syntax-class-properties": { "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.12.13" } }, "@babel/plugin-syntax-class-static-block": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-syntax-dynamic-import": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-syntax-export-namespace-from": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.3" } }, "@babel/plugin-syntax-json-strings": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-syntax-logical-assignment-operators": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-syntax-nullish-coalescing-operator": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-syntax-numeric-separator": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-syntax-object-rest-spread": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-syntax-optional-catch-binding": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-syntax-optional-chaining": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-syntax-private-property-in-object": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-syntax-top-level-await": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-arrow-functions": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.16.0.tgz", "integrity": "sha512-vIFb5250Rbh7roWARvCLvIJ/PtAU5Lhv7BtZ1u24COwpI9Ypjsh+bZcKk6rlIyalK+r0jOc1XQ8I4ovNxNrWrA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-async-to-generator": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.0.tgz", "integrity": "sha512-PbIr7G9kR8tdH6g8Wouir5uVjklETk91GMVSUq+VaOgiinbCkBP6Q7NN/suM/QutZkMJMvcyAriogcYAdhg8Gw==", "dev": true, "requires": { "@babel/helper-module-imports": "^7.16.0", "@babel/helper-plugin-utils": "^7.14.5", "@babel/helper-remap-async-to-generator": "^7.16.0" } }, "@babel/plugin-transform-block-scoped-functions": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.0.tgz", "integrity": "sha512-V14As3haUOP4ZWrLJ3VVx5rCnrYhMSHN/jX7z6FAt5hjRkLsb0snPCmJwSOML5oxkKO4FNoNv7V5hw/y2bjuvg==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-block-scoping": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.16.0.tgz", "integrity": "sha512-27n3l67/R3UrXfizlvHGuTwsRIFyce3D/6a37GRxn28iyTPvNXaW4XvznexRh1zUNLPjbLL22Id0XQElV94ruw==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-classes": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.16.0.tgz", "integrity": "sha512-HUxMvy6GtAdd+GKBNYDWCIA776byUQH8zjnfjxwT1P1ARv/wFu8eBDpmXQcLS/IwRtrxIReGiplOwMeyO7nsDQ==", "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.16.0", "@babel/helper-function-name": "^7.16.0", "@babel/helper-optimise-call-expression": "^7.16.0", "@babel/helper-plugin-utils": "^7.14.5", "@babel/helper-replace-supers": "^7.16.0", "@babel/helper-split-export-declaration": "^7.16.0", "globals": "^11.1.0" } }, "@babel/plugin-transform-computed-properties": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.16.0.tgz", "integrity": "sha512-63l1dRXday6S8V3WFY5mXJwcRAnPYxvFfTlt67bwV1rTyVTM5zrp0DBBb13Kl7+ehkCVwIZPumPpFP/4u70+Tw==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-destructuring": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.16.0.tgz", "integrity": "sha512-Q7tBUwjxLTsHEoqktemHBMtb3NYwyJPTJdM+wDwb0g8PZ3kQUIzNvwD5lPaqW/p54TXBc/MXZu9Jr7tbUEUM8Q==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-dotall-regex": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.0.tgz", "integrity": "sha512-FXlDZfQeLILfJlC6I1qyEwcHK5UpRCFkaoVyA1nk9A1L1Yu583YO4un2KsLBsu3IJb4CUbctZks8tD9xPQubLw==", "dev": true, "requires": { "@babel/helper-create-regexp-features-plugin": "^7.16.0", "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-duplicate-keys": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.16.0.tgz", "integrity": "sha512-LIe2kcHKAZOJDNxujvmp6z3mfN6V9lJxubU4fJIGoQCkKe3Ec2OcbdlYP+vW++4MpxwG0d1wSDOJtQW5kLnkZQ==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-exponentiation-operator": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.0.tgz", "integrity": "sha512-OwYEvzFI38hXklsrbNivzpO3fh87skzx8Pnqi4LoSYeav0xHlueSoCJrSgTPfnbyzopo5b3YVAJkFIcUpK2wsw==", "dev": true, "requires": { "@babel/helper-builder-binary-assignment-operator-visitor": "^7.16.0", "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-for-of": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.16.0.tgz", "integrity": "sha512-5QKUw2kO+GVmKr2wMYSATCTTnHyscl6sxFRAY+rvN7h7WB0lcG0o4NoV6ZQU32OZGVsYUsfLGgPQpDFdkfjlJQ==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-function-name": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.0.tgz", "integrity": "sha512-lBzMle9jcOXtSOXUpc7tvvTpENu/NuekNJVova5lCCWCV9/U1ho2HH2y0p6mBg8fPm/syEAbfaaemYGOHCY3mg==", "dev": true, "requires": { "@babel/helper-function-name": "^7.16.0", "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-literals": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.16.0.tgz", "integrity": "sha512-gQDlsSF1iv9RU04clgXqRjrPyyoJMTclFt3K1cjLmTKikc0s/6vE3hlDeEVC71wLTRu72Fq7650kABrdTc2wMQ==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-member-expression-literals": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.0.tgz", "integrity": "sha512-WRpw5HL4Jhnxw8QARzRvwojp9MIE7Tdk3ez6vRyUk1MwgjJN0aNpRoXainLR5SgxmoXx/vsXGZ6OthP6t/RbUg==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-modules-amd": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.16.0.tgz", "integrity": "sha512-rWFhWbCJ9Wdmzln1NmSCqn7P0RAD+ogXG/bd9Kg5c7PKWkJtkiXmYsMBeXjDlzHpVTJ4I/hnjs45zX4dEv81xw==", "dev": true, "requires": { "@babel/helper-module-transforms": "^7.16.0", "@babel/helper-plugin-utils": "^7.14.5", "babel-plugin-dynamic-import-node": "^2.3.3" } }, "@babel/plugin-transform-modules-commonjs": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.0.tgz", "integrity": "sha512-Dzi+NWqyEotgzk/sb7kgQPJQf7AJkQBWsVp1N6JWc1lBVo0vkElUnGdr1PzUBmfsCCN5OOFya3RtpeHk15oLKQ==", "dev": true, "requires": { "@babel/helper-module-transforms": "^7.16.0", "@babel/helper-plugin-utils": "^7.14.5", "@babel/helper-simple-access": "^7.16.0", "babel-plugin-dynamic-import-node": "^2.3.3" } }, "@babel/plugin-transform-modules-systemjs": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.16.0.tgz", "integrity": "sha512-yuGBaHS3lF1m/5R+6fjIke64ii5luRUg97N2wr+z1sF0V+sNSXPxXDdEEL/iYLszsN5VKxVB1IPfEqhzVpiqvg==", "dev": true, "requires": { "@babel/helper-hoist-variables": "^7.16.0", "@babel/helper-module-transforms": "^7.16.0", "@babel/helper-plugin-utils": "^7.14.5", "@babel/helper-validator-identifier": "^7.15.7", "babel-plugin-dynamic-import-node": "^2.3.3" } }, "@babel/plugin-transform-modules-umd": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.16.0.tgz", "integrity": "sha512-nx4f6no57himWiHhxDM5pjwhae5vLpTK2zCnDH8+wNLJy0TVER/LJRHl2bkt6w9Aad2sPD5iNNoUpY3X9sTGDg==", "dev": true, "requires": { "@babel/helper-module-transforms": "^7.16.0", "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-named-capturing-groups-regex": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.16.0.tgz", "integrity": "sha512-LogN88uO+7EhxWc8WZuQ8vxdSyVGxhkh8WTC3tzlT8LccMuQdA81e9SGV6zY7kY2LjDhhDOFdQVxdGwPyBCnvg==", "dev": true, "requires": { "@babel/helper-create-regexp-features-plugin": "^7.16.0" } }, "@babel/plugin-transform-new-target": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.16.0.tgz", "integrity": "sha512-fhjrDEYv2DBsGN/P6rlqakwRwIp7rBGLPbrKxwh7oVt5NNkIhZVOY2GRV+ULLsQri1bDqwDWnU3vhlmx5B2aCw==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-object-super": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.0.tgz", "integrity": "sha512-fds+puedQHn4cPLshoHcR1DTMN0q1V9ou0mUjm8whx9pGcNvDrVVrgw+KJzzCaiTdaYhldtrUps8DWVMgrSEyg==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.14.5", "@babel/helper-replace-supers": "^7.16.0" } }, "@babel/plugin-transform-parameters": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.0.tgz", "integrity": "sha512-XgnQEm1CevKROPx+udOi/8f8TiGhrUWiHiaUCIp47tE0tpFDjzXNTZc9E5CmCwxNjXTWEVqvRfWZYOTFvMa/ZQ==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-property-literals": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.0.tgz", "integrity": "sha512-XLldD4V8+pOqX2hwfWhgwXzGdnDOThxaNTgqagOcpBgIxbUvpgU2FMvo5E1RyHbk756WYgdbS0T8y0Cj9FKkWQ==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-regenerator": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.16.0.tgz", "integrity": "sha512-JAvGxgKuwS2PihiSFaDrp94XOzzTUeDeOQlcKzVAyaPap7BnZXK/lvMDiubkPTdotPKOIZq9xWXWnggUMYiExg==", "dev": true, "requires": { "regenerator-transform": "^0.14.2" } }, "@babel/plugin-transform-reserved-words": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.16.0.tgz", "integrity": "sha512-Dgs8NNCehHSvXdhEhln8u/TtJxfVwGYCgP2OOr5Z3Ar+B+zXicEOKNTyc+eca2cuEOMtjW6m9P9ijOt8QdqWkg==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-shorthand-properties": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.0.tgz", "integrity": "sha512-iVb1mTcD8fuhSv3k99+5tlXu5N0v8/DPm2mO3WACLG6al1CGZH7v09HJyUb1TtYl/Z+KrM6pHSIJdZxP5A+xow==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-spread": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.16.0.tgz", "integrity": "sha512-Ao4MSYRaLAQczZVp9/7E7QHsCuK92yHRrmVNRe/SlEJjhzivq0BSn8mEraimL8wizHZ3fuaHxKH0iwzI13GyGg==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.14.5", "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0" } }, "@babel/plugin-transform-sticky-regex": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.0.tgz", "integrity": "sha512-/ntT2NljR9foobKk4E/YyOSwcGUXtYWv5tinMK/3RkypyNBNdhHUaq6Orw5DWq9ZcNlS03BIlEALFeQgeVAo4Q==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-template-literals": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.16.0.tgz", "integrity": "sha512-Rd4Ic89hA/f7xUSJQk5PnC+4so50vBoBfxjdQAdvngwidM8jYIBVxBZ/sARxD4e0yMXRbJVDrYf7dyRtIIKT6Q==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-typeof-symbol": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.16.0.tgz", "integrity": "sha512-++V2L8Bdf4vcaHi2raILnptTBjGEFxn5315YU+e8+EqXIucA+q349qWngCLpUYqqv233suJ6NOienIVUpS9cqg==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-unicode-escapes": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.0.tgz", "integrity": "sha512-VFi4dhgJM7Bpk8lRc5CMaRGlKZ29W9C3geZjt9beuzSUrlJxsNwX7ReLwaL6WEvsOf2EQkyIJEPtF8EXjB/g2A==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-unicode-regex": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.0.tgz", "integrity": "sha512-jHLK4LxhHjvCeZDWyA9c+P9XH1sOxRd1RO9xMtDVRAOND/PczPqizEtVdx4TQF/wyPaewqpT+tgQFYMnN/P94A==", "dev": true, "requires": { "@babel/helper-create-regexp-features-plugin": "^7.16.0", "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/preset-env": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.16.0.tgz", "integrity": "sha512-cdTu/W0IrviamtnZiTfixPfIncr2M1VqRrkjzZWlr1B4TVYimCFK5jkyOdP4qw2MrlKHi+b3ORj6x8GoCew8Dg==", "dev": true, "requires": { "@babel/compat-data": "^7.16.0", "@babel/helper-compilation-targets": "^7.16.0", "@babel/helper-plugin-utils": "^7.14.5", "@babel/helper-validator-option": "^7.14.5", "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.16.0", "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.16.0", "@babel/plugin-proposal-async-generator-functions": "^7.16.0", "@babel/plugin-proposal-class-properties": "^7.16.0", "@babel/plugin-proposal-class-static-block": "^7.16.0", "@babel/plugin-proposal-dynamic-import": "^7.16.0", "@babel/plugin-proposal-export-namespace-from": "^7.16.0", "@babel/plugin-proposal-json-strings": "^7.16.0", "@babel/plugin-proposal-logical-assignment-operators": "^7.16.0", "@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.0", "@babel/plugin-proposal-numeric-separator": "^7.16.0", "@babel/plugin-proposal-object-rest-spread": "^7.16.0", "@babel/plugin-proposal-optional-catch-binding": "^7.16.0", "@babel/plugin-proposal-optional-chaining": "^7.16.0", "@babel/plugin-proposal-private-methods": "^7.16.0", "@babel/plugin-proposal-private-property-in-object": "^7.16.0", "@babel/plugin-proposal-unicode-property-regex": "^7.16.0", "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-class-properties": "^7.12.13", "@babel/plugin-syntax-class-static-block": "^7.14.5", "@babel/plugin-syntax-dynamic-import": "^7.8.3", "@babel/plugin-syntax-export-namespace-from": "^7.8.3", "@babel/plugin-syntax-json-strings": "^7.8.3", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", "@babel/plugin-syntax-numeric-separator": "^7.10.4", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", "@babel/plugin-syntax-optional-chaining": "^7.8.3", "@babel/plugin-syntax-private-property-in-object": "^7.14.5", "@babel/plugin-syntax-top-level-await": "^7.14.5", "@babel/plugin-transform-arrow-functions": "^7.16.0", "@babel/plugin-transform-async-to-generator": "^7.16.0", "@babel/plugin-transform-block-scoped-functions": "^7.16.0", "@babel/plugin-transform-block-scoping": "^7.16.0", "@babel/plugin-transform-classes": "^7.16.0", "@babel/plugin-transform-computed-properties": "^7.16.0", "@babel/plugin-transform-destructuring": "^7.16.0", "@babel/plugin-transform-dotall-regex": "^7.16.0", "@babel/plugin-transform-duplicate-keys": "^7.16.0", "@babel/plugin-transform-exponentiation-operator": "^7.16.0", "@babel/plugin-transform-for-of": "^7.16.0", "@babel/plugin-transform-function-name": "^7.16.0", "@babel/plugin-transform-literals": "^7.16.0", "@babel/plugin-transform-member-expression-literals": "^7.16.0", "@babel/plugin-transform-modules-amd": "^7.16.0", "@babel/plugin-transform-modules-commonjs": "^7.16.0", "@babel/plugin-transform-modules-systemjs": "^7.16.0", "@babel/plugin-transform-modules-umd": "^7.16.0", "@babel/plugin-transform-named-capturing-groups-regex": "^7.16.0", "@babel/plugin-transform-new-target": "^7.16.0", "@babel/plugin-transform-object-super": "^7.16.0", "@babel/plugin-transform-parameters": "^7.16.0", "@babel/plugin-transform-property-literals": "^7.16.0", "@babel/plugin-transform-regenerator": "^7.16.0", "@babel/plugin-transform-reserved-words": "^7.16.0", "@babel/plugin-transform-shorthand-properties": "^7.16.0", "@babel/plugin-transform-spread": "^7.16.0", "@babel/plugin-transform-sticky-regex": "^7.16.0", "@babel/plugin-transform-template-literals": "^7.16.0", "@babel/plugin-transform-typeof-symbol": "^7.16.0", "@babel/plugin-transform-unicode-escapes": "^7.16.0", "@babel/plugin-transform-unicode-regex": "^7.16.0", "@babel/preset-modules": "^0.1.5", "@babel/types": "^7.16.0", "babel-plugin-polyfill-corejs2": "^0.2.3", "babel-plugin-polyfill-corejs3": "^0.3.0", "babel-plugin-polyfill-regenerator": "^0.2.3", "core-js-compat": "^3.19.0", "semver": "^6.3.0" }, "dependencies": { "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true } } }, "@babel/preset-modules": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0", "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", "@babel/plugin-transform-dotall-regex": "^7.4.4", "@babel/types": "^7.4.4", "esutils": "^2.0.2" } }, "@babel/register": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.16.0.tgz", "integrity": "sha512-lzl4yfs0zVXnooeLE0AAfYaT7F3SPA8yB2Bj4W1BiZwLbMS3MZH35ZvCWSRHvneUugwuM+Wsnrj7h0F7UmU3NQ==", "dev": true, "requires": { "clone-deep": "^4.0.1", "find-cache-dir": "^2.0.0", "make-dir": "^2.1.0", "pirates": "^4.0.0", "source-map-support": "^0.5.16" } }, "@babel/runtime": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.16.0.tgz", "integrity": "sha512-Nht8L0O8YCktmsDV6FqFue7vQLRx3Hb0B37lS5y0jDRqRxlBG4wIJHnf9/bgSE2UyipKFA01YtS+npRdTWBUyw==", "dev": true, "requires": { "regenerator-runtime": "^0.13.4" } }, "@babel/template": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.0.tgz", "integrity": "sha512-MnZdpFD/ZdYhXwiunMqqgyZyucaYsbL0IrjoGjaVhGilz+x8YB++kRfygSOIj1yOtWKPlx7NBp+9I1RQSgsd5A==", "dev": true, "requires": { "@babel/code-frame": "^7.16.0", "@babel/parser": "^7.16.0", "@babel/types": "^7.16.0" } }, "@babel/traverse": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.0.tgz", "integrity": "sha512-qQ84jIs1aRQxaGaxSysII9TuDaguZ5yVrEuC0BN2vcPlalwfLovVmCjbFDPECPXcYM/wLvNFfp8uDOliLxIoUQ==", "dev": true, "requires": { "@babel/code-frame": "^7.16.0", "@babel/generator": "^7.16.0", "@babel/helper-function-name": "^7.16.0", "@babel/helper-hoist-variables": "^7.16.0", "@babel/helper-split-export-declaration": "^7.16.0", "@babel/parser": "^7.16.0", "@babel/types": "^7.16.0", "debug": "^4.1.0", "globals": "^11.1.0" }, "dependencies": { "debug": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", "dev": true, "requires": { "ms": "2.1.2" } }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true } } }, "@babel/types": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.0.tgz", "integrity": "sha512-PJgg/k3SdLsGb3hhisFvtLOw5ts113klrpLuIPtCJIU+BB24fqq6lf8RWqKJEjzqXR9AEH1rIb5XTqwBHB+kQg==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.15.7", "to-fast-properties": "^2.0.0" } }, "@nicolo-ribaudo/chokidar-2": { "version": "2.1.8-no-fsevents.3", "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.3.tgz", "integrity": "sha512-s88O1aVtXftvp5bCPB7WnmXc5IwOZZ7YPuwNPt+GtOOXpPvad1LfbmjYv+qII7zP6RU2QGnqve27dnLycEnyEQ==", "dev": true, "optional": true }, "@rdfjs/types": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@rdfjs/types/-/types-1.0.1.tgz", "integrity": "sha512-YxVkH0XrCNG3MWeZxfg596GFe+oorTVusmNxRP6ZHTsGczZ8AGvG3UchRNkg3Fy4MyysI7vBAA5YZbESL+VmHQ==", "dev": true, "requires": { "@types/node": "*" } }, "@types/http-link-header": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/@types/http-link-header/-/http-link-header-1.0.3.tgz", "integrity": "sha512-y8HkoD/vyid+5MrJ3aas0FvU3/BVBGcyG9kgxL0Zn4JwstA8CglFPnrR0RuzOjRCXwqzL5uxWC2IO7Ub0rMU2A==", "dev": true, "requires": { "@types/node": "*" } }, "@types/json-stable-stringify": { "version": "1.0.32", "resolved": "https://registry.npmjs.org/@types/json-stable-stringify/-/json-stable-stringify-1.0.32.tgz", "integrity": "sha512-q9Q6+eUEGwQkv4Sbst3J4PNgDOvpuVuKj79Hl/qnmBMEIPzB5QoFRUtjcgcg2xNUZyYUGXBk5wYIBKHt0A+Mxw==", "dev": true }, "@types/log-symbols": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@types/log-symbols/-/log-symbols-3.0.0.tgz", "integrity": "sha512-uW/AGf/41aZ1c1dhZ3s063Ii2OqT8EQooZu3t4VCRyR3dqyA2Bg46BcKyZpnWTY7wzm6cayq4jzylnruu4KqSA==", "dev": true, "requires": { "log-symbols": "*" } }, "@types/minimist": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.1.tgz", "integrity": "sha512-fZQQafSREFyuZcdWFAExYjBiCL7AUCdgsk80iO0q4yihYYdcIiH28CcuPTGFgLOCC8RlW49GSQxdHwZP+I7CNg==", "dev": true }, "@types/n3": { "version": "1.10.4", "resolved": "https://registry.npmjs.org/@types/n3/-/n3-1.10.4.tgz", "integrity": "sha512-FfRTwcbXcScVHuAjIASveRWL6Fi6fPALl1Ge8tMESYLqU7R42LJvtdBpUi+f9YK0oQPqIN+zFFgMDFJfLMx0bg==", "dev": true, "requires": { "@types/node": "*", "rdf-js": "^4.0.2" } }, "@types/node": { "version": "18.6.3", "resolved": "https://registry.npmjs.org/@types/node/-/node-18.6.3.tgz", "integrity": "sha512-6qKpDtoaYLM+5+AFChLhHermMQxc3TOEFIDzrZLPRGHPrLEwqFkkT5Kx3ju05g6X7uDPazz3jHbKPX0KzCjntg==", "dev": true }, "@types/readable-stream": { "version": "2.3.14", "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-2.3.14.tgz", "integrity": "sha512-8jQ5Mp7bsDJEnW/69i6nAaQMoLwAVJVc7ZRAVTrdh/o6XueQsX38TEvKuYyoQj76/mg7WdlRfMrtl9pDLCJWsg==", "dev": true, "requires": { "@types/node": "*", "safe-buffer": "*" } }, "@types/sax": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@types/sax/-/sax-1.2.1.tgz", "integrity": "sha512-dqYdvN7Sbw8QT/0Ci5rhjE4/iCMJEM0Y9rHpCu+gGXD9Lwbz28t6HI2yegsB6BoV1sShRMU6lAmAcgRjmFy7LA==", "dev": true, "requires": { "@types/node": "*" } }, "@ungap/promise-all-settled": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", "dev": true }, "abort-controller": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", "requires": { "event-target-shim": "^5.0.0" } }, "acorn": { "version": "6.4.2", "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", "dev": true }, "acorn-jsx": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", "dev": true, "requires": {} }, "acorn-node": { "version": "1.8.2", "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", "dev": true, "requires": { "acorn": "^7.0.0", "acorn-walk": "^7.0.0", "xtend": "^4.0.2" }, "dependencies": { "acorn": { "version": "7.4.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", "dev": true } } }, "acorn-walk": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", "dev": true }, "ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "requires": { "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-colors": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", "dev": true }, "ansi-escapes": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", "dev": true }, "ansi-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", "dev": true }, "ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { "color-convert": "^1.9.0" } }, "anymatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", "dev": true, "requires": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" } }, "append-transform": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-1.0.0.tgz", "integrity": "sha512-P009oYkeHyU742iSZJzZZywj4QRJdnTWffaKuJQLablCZ1uz6/cW4yaRgcDaoQ+uwOxxnt0gRUcwfsNP2ri0gw==", "dev": true, "requires": { "default-require-extensions": "^2.0.0" } }, "archy": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", "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" } }, "arrayify-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/arrayify-stream/-/arrayify-stream-1.0.0.tgz", "integrity": "sha512-RP80ep76Lbew2wWN5ogrl2NluTnBVYYh2K3NNCcWfcmmUB7nBcNBctiJeEZAixp3I1vQ9H88iHZ9MbHSdkuupQ==", "dev": true }, "asn1.js": { "version": "5.4.1", "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", "dev": true, "requires": { "bn.js": "^4.0.0", "inherits": "^2.0.1", "minimalistic-assert": "^1.0.0", "safer-buffer": "^2.1.0" }, "dependencies": { "bn.js": { "version": "4.12.0", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", "dev": true } } }, "assert": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", "dev": true, "requires": { "object-assign": "^4.1.1", "util": "0.10.3" }, "dependencies": { "inherits": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", "dev": true }, "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" } } } }, "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 }, "astral-regex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", "dev": true }, "available-typed-arrays": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", "dev": true }, "babel-plugin-dynamic-import-node": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", "dev": true, "requires": { "object.assign": "^4.1.0" } }, "babel-plugin-polyfill-corejs2": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.3.tgz", "integrity": "sha512-NDZ0auNRzmAfE1oDDPW2JhzIMXUk+FFe2ICejmt5T4ocKgiQx3e0VCRx9NCAidcMtL2RUZaWtXnmjTCkx0tcbA==", "dev": true, "requires": { "@babel/compat-data": "^7.13.11", "@babel/helper-define-polyfill-provider": "^0.2.4", "semver": "^6.1.1" }, "dependencies": { "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true } } }, "babel-plugin-polyfill-corejs3": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.3.0.tgz", "integrity": "sha512-JLwi9vloVdXLjzACL80j24bG6/T1gYxwowG44dg6HN/7aTPdyPbJJidf6ajoA3RPHHtW0j9KMrSOLpIZpAnPpg==", "dev": true, "requires": { "@babel/helper-define-polyfill-provider": "^0.2.4", "core-js-compat": "^3.18.0" } }, "babel-plugin-polyfill-regenerator": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.3.tgz", "integrity": "sha512-JVE78oRZPKFIeUqFGrSORNzQnrDwZR16oiWeGM8ZyjBn2XAT5OjP+wXx5ESuo33nUsFUEJYjtklnsKbxW5L+7g==", "dev": true, "requires": { "@babel/helper-define-polyfill-provider": "^0.2.4" } }, "balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, "base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", "dev": true }, "binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", "dev": true }, "bn.js": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==", "dev": true }, "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" } }, "braces": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dev": true, "requires": { "fill-range": "^7.0.1" } }, "brorand": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", "dev": true }, "browser-pack": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/browser-pack/-/browser-pack-6.1.0.tgz", "integrity": "sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA==", "dev": true, "requires": { "combine-source-map": "~0.8.0", "defined": "^1.0.0", "JSONStream": "^1.0.3", "safe-buffer": "^5.1.1", "through2": "^2.0.0", "umd": "^3.0.0" } }, "browser-resolve": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-2.0.0.tgz", "integrity": "sha512-7sWsQlYL2rGLy2IWm8WL8DCTJvYLc/qlOnsakDac87SOoCd16WLsaAMdCiAqsTNHIe+SXfaqyxyo6THoWqs8WQ==", "dev": true, "requires": { "resolve": "^1.17.0" } }, "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 }, "browserify": { "version": "17.0.0", "resolved": "https://registry.npmjs.org/browserify/-/browserify-17.0.0.tgz", "integrity": "sha512-SaHqzhku9v/j6XsQMRxPyBrSP3gnwmE27gLJYZgMT2GeK3J0+0toN+MnuNYDfHwVGQfLiMZ7KSNSIXHemy905w==", "dev": true, "requires": { "assert": "^1.4.0", "browser-pack": "^6.0.1", "browser-resolve": "^2.0.0", "browserify-zlib": "~0.2.0", "buffer": "~5.2.1", "cached-path-relative": "^1.0.0", "concat-stream": "^1.6.0", "console-browserify": "^1.1.0", "constants-browserify": "~1.0.0", "crypto-browserify": "^3.0.0", "defined": "^1.0.0", "deps-sort": "^2.0.1", "domain-browser": "^1.2.0", "duplexer2": "~0.1.2", "events": "^3.0.0", "glob": "^7.1.0", "has": "^1.0.0", "htmlescape": "^1.1.0", "https-browserify": "^1.0.0", "inherits": "~2.0.1", "insert-module-globals": "^7.2.1", "JSONStream": "^1.0.3", "labeled-stream-splicer": "^2.0.0", "mkdirp-classic": "^0.5.2", "module-deps": "^6.2.3", "os-browserify": "~0.3.0", "parents": "^1.0.1", "path-browserify": "^1.0.0", "process": "~0.11.0", "punycode": "^1.3.2", "querystring-es3": "~0.2.0", "read-only-stream": "^2.0.0", "readable-stream": "^2.0.2", "resolve": "^1.1.4", "shasum-object": "^1.0.0", "shell-quote": "^1.6.1", "stream-browserify": "^3.0.0", "stream-http": "^3.0.0", "string_decoder": "^1.1.1", "subarg": "^1.0.0", "syntax-error": "^1.1.1", "through2": "^2.0.0", "timers-browserify": "^1.0.1", "tty-browserify": "0.0.1", "url": "~0.11.0", "util": "~0.12.0", "vm-browserify": "^1.0.0", "xtend": "^4.0.0" }, "dependencies": { "punycode": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", "dev": true }, "readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "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.1.1", "util-deprecate": "~1.0.1" } }, "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==", "dev": true }, "string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { "safe-buffer": "~5.1.0" } } } }, "browserify-aes": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", "dev": true, "requires": { "buffer-xor": "^1.0.3", "cipher-base": "^1.0.0", "create-hash": "^1.1.0", "evp_bytestokey": "^1.0.3", "inherits": "^2.0.1", "safe-buffer": "^5.0.1" } }, "browserify-cipher": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", "dev": true, "requires": { "browserify-aes": "^1.0.4", "browserify-des": "^1.0.0", "evp_bytestokey": "^1.0.0" } }, "browserify-des": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", "dev": true, "requires": { "cipher-base": "^1.0.1", "des.js": "^1.0.0", "inherits": "^2.0.1", "safe-buffer": "^5.1.2" } }, "browserify-rsa": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", "dev": true, "requires": { "bn.js": "^5.0.0", "randombytes": "^2.0.1" } }, "browserify-sign": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", "dev": true, "requires": { "bn.js": "^5.1.1", "browserify-rsa": "^4.0.1", "create-hash": "^1.2.0", "create-hmac": "^1.1.7", "elliptic": "^6.5.3", "inherits": "^2.0.4", "parse-asn1": "^5.1.5", "readable-stream": "^3.6.0", "safe-buffer": "^5.2.0" }, "dependencies": { "readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "dev": true, "requires": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } } } }, "browserify-zlib": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", "dev": true, "requires": { "pako": "~1.0.5" } }, "browserslist": { "version": "4.17.6", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.17.6.tgz", "integrity": "sha512-uPgz3vyRTlEiCv4ee9KlsKgo2V6qPk7Jsn0KAn2OBqbqKo3iNcPEC1Ti6J4dwnz+aIRfEEEuOzC9IBk8tXUomw==", "dev": true, "requires": { "caniuse-lite": "^1.0.30001274", "electron-to-chromium": "^1.3.886", "escalade": "^3.1.1", "node-releases": "^2.0.1", "picocolors": "^1.0.0" } }, "buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.2.1.tgz", "integrity": "sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg==", "dev": true, "requires": { "base64-js": "^1.0.2", "ieee754": "^1.1.4" } }, "buffer-from": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", "dev": true }, "buffer-xor": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", "dev": true }, "builtin-status-codes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", "dev": true }, "cached-path-relative": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/cached-path-relative/-/cached-path-relative-1.0.2.tgz", "integrity": "sha512-5r2GqsoEb4qMTTN9J+WzXfjov+hjxT+j3u5K+kIVNIwAd99DLCJE9pBIMP1qVeybV6JiijL385Oz0DcYxfbOIg==", "dev": true }, "caching-transform": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-3.0.2.tgz", "integrity": "sha512-Mtgcv3lh3U0zRii/6qVgQODdPA4G3zhG+jtbCWj39RXuUFTMzH0vcdMtaJS1jPowd+It2Pqr6y3NJMQqOqCE2w==", "dev": true, "requires": { "hasha": "^3.0.0", "make-dir": "^2.0.0", "package-hash": "^3.0.0", "write-file-atomic": "^2.4.2" } }, "call-bind": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", "dev": true, "requires": { "function-bind": "^1.1.1", "get-intrinsic": "^1.0.2" } }, "callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true }, "camelcase": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true }, "caniuse-lite": { "version": "1.0.30001374", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001374.tgz", "integrity": "sha512-mWvzatRx3w+j5wx/mpFN5v5twlPrabG8NqX2c6e45LCpymdoGqNvRkRutFUqpRTXKFQFNQJasvK0YT7suW6/Hw==", "dev": true }, "canonicalize": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/canonicalize/-/canonicalize-1.0.8.tgz", "integrity": "sha512-0CNTVCLZggSh7bc5VkX5WWPWO+cyZbNd07IHIsSXLia/eAq+r836hgk+8BKoEh7949Mda87VUOitx5OddVj64A==", "dev": true }, "chai": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.4.tgz", "integrity": "sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA==", "dev": true, "requires": { "assertion-error": "^1.1.0", "check-error": "^1.0.2", "deep-eql": "^3.0.1", "get-func-name": "^2.0.0", "pathval": "^1.1.1", "type-detect": "^4.0.5" } }, "chai-things": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/chai-things/-/chai-things-0.2.0.tgz", "integrity": "sha1-xVEoN4+bs5nplPAAUhUZhO1uvnA=", "dev": true }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "requires": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" } }, "chardet": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", "dev": true }, "check-error": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", "dev": true }, "chokidar": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", "dev": true, "optional": true, "requires": { "anymatch": "~3.1.2", "braces": "~3.0.2", "fsevents": "~2.3.2", "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", "readdirp": "~3.6.0" }, "dependencies": { "readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, "optional": true, "requires": { "picomatch": "^2.2.1" } } } }, "cipher-base": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", "dev": true, "requires": { "inherits": "^2.0.1", "safe-buffer": "^5.0.1" } }, "cli-cursor": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", "dev": true, "requires": { "restore-cursor": "^2.0.0" } }, "cli-width": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==", "dev": true }, "cliui": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", "dev": true, "requires": { "string-width": "^3.1.0", "strip-ansi": "^5.2.0", "wrap-ansi": "^5.1.0" }, "dependencies": { "ansi-regex": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", "dev": true }, "string-width": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", "dev": true, "requires": { "emoji-regex": "^7.0.1", "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^5.1.0" } }, "strip-ansi": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dev": true, "requires": { "ansi-regex": "^4.1.0" } } } }, "clone-deep": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", "dev": true, "requires": { "is-plain-object": "^2.0.4", "kind-of": "^6.0.2", "shallow-clone": "^3.0.0" } }, "color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, "requires": { "color-name": "1.1.3" } }, "color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "dev": true }, "colors": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", "dev": true }, "combine-source-map": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.8.0.tgz", "integrity": "sha1-pY0N8ELBhvz4IqjoAV9UUNLXmos=", "dev": true, "requires": { "convert-source-map": "~1.1.0", "inline-source-map": "~0.6.0", "lodash.memoize": "~3.0.3", "source-map": "~0.5.3" }, "dependencies": { "convert-source-map": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz", "integrity": "sha1-SCnId+n+SbMWHzvzZziI4gRpmGA=", "dev": true } } }, "commander": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", "dev": true }, "commondir": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", "dev": true }, "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" }, "dependencies": { "readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "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.1.1", "util-deprecate": "~1.0.1" } }, "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==", "dev": true }, "string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { "safe-buffer": "~5.1.0" } } } }, "console-browserify": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", "dev": true }, "constants-browserify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", "dev": true }, "convert-source-map": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", "dev": true, "requires": { "safe-buffer": "~5.1.1" }, "dependencies": { "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==", "dev": true } } }, "core-js-compat": { "version": "3.19.1", "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.19.1.tgz", "integrity": "sha512-Q/VJ7jAF/y68+aUsQJ/afPOewdsGkDtcMb40J8MbuWKlK3Y+wtHq8bTHKPj2WKWLIqmS5JhHs4CzHtz6pT2W6g==", "dev": true, "requires": { "browserslist": "^4.17.6", "semver": "7.0.0" }, "dependencies": { "semver": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", "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=", "dev": true }, "cp-file": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/cp-file/-/cp-file-6.2.0.tgz", "integrity": "sha512-fmvV4caBnofhPe8kOcitBwSn2f39QLjnAnGq3gO9dfd75mUytzKNZB1hde6QHunW2Rt+OwuBOMc3i1tNElbszA==", "dev": true, "requires": { "graceful-fs": "^4.1.2", "make-dir": "^2.0.0", "nested-error-stacks": "^2.0.0", "pify": "^4.0.1", "safe-buffer": "^5.0.1" } }, "create-ecdh": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", "dev": true, "requires": { "bn.js": "^4.1.0", "elliptic": "^6.5.3" }, "dependencies": { "bn.js": { "version": "4.12.0", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", "dev": true } } }, "create-hash": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", "dev": true, "requires": { "cipher-base": "^1.0.1", "inherits": "^2.0.1", "md5.js": "^1.3.4", "ripemd160": "^2.0.1", "sha.js": "^2.4.0" } }, "create-hmac": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", "dev": true, "requires": { "cipher-base": "^1.0.3", "create-hash": "^1.1.0", "inherits": "^2.0.1", "ripemd160": "^2.0.0", "safe-buffer": "^5.0.1", "sha.js": "^2.4.8" } }, "cross-fetch": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", "dev": true, "requires": { "node-fetch": "2.6.7" } }, "cross-spawn": { "version": "6.0.5", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", "dev": true, "requires": { "nice-try": "^1.0.4", "path-key": "^2.0.1", "semver": "^5.5.0", "shebang-command": "^1.2.0", "which": "^1.2.9" } }, "crypto-browserify": { "version": "3.12.0", "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", "dev": true, "requires": { "browserify-cipher": "^1.0.0", "browserify-sign": "^4.0.0", "create-ecdh": "^4.0.0", "create-hash": "^1.1.0", "create-hmac": "^1.1.0", "diffie-hellman": "^5.0.0", "inherits": "^2.0.1", "pbkdf2": "^3.0.3", "public-encrypt": "^4.0.0", "randombytes": "^2.0.0", "randomfill": "^1.0.3" } }, "dash-ast": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/dash-ast/-/dash-ast-1.0.0.tgz", "integrity": "sha512-Vy4dx7gquTeMcQR/hDkYLGUnwVil6vk4FOOct+djUnHOUWt+zJPJAaRIXaAFkPXtJjvlY7o3rfRu0/3hpnwoUA==", "dev": true }, "decamelize": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", "dev": true }, "deep-eql": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", "dev": true, "requires": { "type-detect": "^4.0.0" } }, "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 }, "default-require-extensions": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-2.0.0.tgz", "integrity": "sha1-9fj7sYp9bVCyH2QfZJ67Uiz+JPc=", "dev": true, "requires": { "strip-bom": "^3.0.0" } }, "define-properties": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", "dev": true, "requires": { "object-keys": "^1.0.12" } }, "defined": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", "dev": true }, "deps-sort": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/deps-sort/-/deps-sort-2.0.1.tgz", "integrity": "sha512-1orqXQr5po+3KI6kQb9A4jnXT1PBwggGl2d7Sq2xsnOeI9GPcE/tGcF9UiSZtZBM7MukY4cAh7MemS6tZYipfw==", "dev": true, "requires": { "JSONStream": "^1.0.3", "shasum-object": "^1.0.0", "subarg": "^1.0.0", "through2": "^2.0.0" } }, "des.js": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", "dev": true, "requires": { "inherits": "^2.0.1", "minimalistic-assert": "^1.0.0" } }, "detective": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.0.tgz", "integrity": "sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg==", "dev": true, "requires": { "acorn-node": "^1.6.1", "defined": "^1.0.0", "minimist": "^1.1.1" } }, "diff": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", "dev": true }, "diffie-hellman": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", "dev": true, "requires": { "bn.js": "^4.1.0", "miller-rabin": "^4.0.0", "randombytes": "^2.0.0" }, "dependencies": { "bn.js": { "version": "4.12.0", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", "dev": true } } }, "docco": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/docco/-/docco-0.8.1.tgz", "integrity": "sha512-OFVdjpxw4aTI+FThrCY2NEWZV/nvGDFlfeQxUTMkKL+oY2gD2sMl0N5ogoAj3YLZU05UDBSh64ROYzLFzxSoSQ==", "dev": true, "requires": { "commander": ">= 0.5.2", "fs-extra": ">= 0.6.0", "highlight.js": ">= 8.0.x", "marked": ">= 0.2.7", "underscore": ">= 1.0.0" } }, "doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, "requires": { "esutils": "^2.0.2" } }, "domain-browser": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", "dev": true }, "duplexer2": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", "dev": true, "requires": { "readable-stream": "^2.0.2" }, "dependencies": { "readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "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.1.1", "util-deprecate": "~1.0.1" } }, "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==", "dev": true }, "string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { "safe-buffer": "~5.1.0" } } } }, "electron-to-chromium": { "version": "1.3.891", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.891.tgz", "integrity": "sha512-3cpwR82QkIS01CN/dup/4Yr3BiOiRLlZlcAFn/5FbNCunMO9ojqDgEP9JEo1QNLflu3pEnPWve50gHOEKc7r6w==", "dev": true }, "elliptic": { "version": "6.5.4", "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", "dev": true, "requires": { "bn.js": "^4.11.9", "brorand": "^1.1.0", "hash.js": "^1.0.0", "hmac-drbg": "^1.0.1", "inherits": "^2.0.4", "minimalistic-assert": "^1.0.1", "minimalistic-crypto-utils": "^1.0.1" }, "dependencies": { "bn.js": { "version": "4.12.0", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", "dev": true } } }, "emoji-regex": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", "dev": true }, "error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, "requires": { "is-arrayish": "^0.2.1" } }, "es-abstract": { "version": "1.19.1", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", "dev": true, "requires": { "call-bind": "^1.0.2", "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", "get-intrinsic": "^1.1.1", "get-symbol-description": "^1.0.0", "has": "^1.0.3", "has-symbols": "^1.0.2", "internal-slot": "^1.0.3", "is-callable": "^1.2.4", "is-negative-zero": "^2.0.1", "is-regex": "^1.1.4", "is-shared-array-buffer": "^1.0.1", "is-string": "^1.0.7", "is-weakref": "^1.0.1", "object-inspect": "^1.11.0", "object-keys": "^1.1.1", "object.assign": "^4.1.2", "string.prototype.trimend": "^1.0.4", "string.prototype.trimstart": "^1.0.4", "unbox-primitive": "^1.0.1" } }, "es-to-primitive": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "dev": true, "requires": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", "is-symbol": "^1.0.2" } }, "es6-error": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", "dev": true }, "escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", "dev": true }, "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 }, "eslint": { "version": "5.16.0", "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.16.0.tgz", "integrity": "sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", "ajv": "^6.9.1", "chalk": "^2.1.0", "cross-spawn": "^6.0.5", "debug": "^4.0.1", "doctrine": "^3.0.0", "eslint-scope": "^4.0.3", "eslint-utils": "^1.3.1", "eslint-visitor-keys": "^1.0.0", "espree": "^5.0.1", "esquery": "^1.0.1", "esutils": "^2.0.2", "file-entry-cache": "^5.0.1", "functional-red-black-tree": "^1.0.1", "glob": "^7.1.2", "globals": "^11.7.0", "ignore": "^4.0.6", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "inquirer": "^6.2.2", "js-yaml": "^3.13.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.3.0", "lodash": "^4.17.11", "minimatch": "^3.0.4", "mkdirp": "^0.5.1", "natural-compare": "^1.4.0", "optionator": "^0.8.2", "path-is-inside": "^1.0.2", "progress": "^2.0.0", "regexpp": "^2.0.1", "semver": "^5.5.1", "strip-ansi": "^4.0.0", "strip-json-comments": "^2.0.1", "table": "^5.2.3", "text-table": "^0.2.0" }, "dependencies": { "debug": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", "dev": true, "requires": { "ms": "2.1.2" } }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true } } }, "eslint-scope": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", "dev": true, "requires": { "esrecurse": "^4.1.0", "estraverse": "^4.1.1" } }, "eslint-utils": { "version": "1.4.3", "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", "dev": true, "requires": { "eslint-visitor-keys": "^1.1.0" } }, "eslint-visitor-keys": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", "dev": true }, "espree": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/espree/-/espree-5.0.1.tgz", "integrity": "sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A==", "dev": true, "requires": { "acorn": "^6.0.7", "acorn-jsx": "^5.0.0", "eslint-visitor-keys": "^1.0.0" } }, "esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true }, "esquery": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", "dev": true, "requires": { "estraverse": "^5.1.0" }, "dependencies": { "estraverse": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", "dev": true } } }, "esrecurse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, "requires": { "estraverse": "^5.2.0" }, "dependencies": { "estraverse": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", "dev": true } } }, "estraverse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true }, "esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true }, "event-target-shim": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==" }, "events": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", "dev": true }, "evp_bytestokey": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", "dev": true, "requires": { "md5.js": "^1.3.4", "safe-buffer": "^5.1.1" } }, "external-editor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", "dev": true, "requires": { "chardet": "^0.7.0", "iconv-lite": "^0.4.24", "tmp": "^0.0.33" } }, "fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, "fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", "dev": true }, "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 }, "fast-safe-stringify": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", "dev": true }, "figures": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", "dev": true, "requires": { "escape-string-regexp": "^1.0.5" } }, "file-entry-cache": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", "dev": true, "requires": { "flat-cache": "^2.0.1" } }, "fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "dev": true, "requires": { "to-regex-range": "^5.0.1" } }, "find-cache-dir": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", "dev": true, "requires": { "commondir": "^1.0.1", "make-dir": "^2.0.0", "pkg-dir": "^3.0.0" } }, "find-up": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, "requires": { "locate-path": "^3.0.0" } }, "flat": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", "dev": true }, "flat-cache": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", "dev": true, "requires": { "flatted": "^2.0.0", "rimraf": "2.6.3", "write": "1.0.3" } }, "flatted": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", "dev": true }, "foreach": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", "dev": true }, "foreground-child": { "version": "1.5.6", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-1.5.6.tgz", "integrity": "sha1-T9ca0t/elnibmApcCilZN8svXOk=", "dev": true, "requires": { "cross-spawn": "^4", "signal-exit": "^3.0.0" }, "dependencies": { "cross-spawn": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-4.0.2.tgz", "integrity": "sha1-e5JHYhwjrf3ThWAEqCPL45dCTUE=", "dev": true, "requires": { "lru-cache": "^4.0.1", "which": "^1.2.9" } } } }, "fs-extra": { "version": "10.0.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", "dev": true, "requires": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" } }, "fs-readdir-recursive": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==", "dev": true }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "dev": true }, "fsevents": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", "dev": true, "optional": true }, "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "dev": true }, "functional-red-black-tree": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", "dev": true }, "gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "dev": true }, "get-assigned-identifiers": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/get-assigned-identifiers/-/get-assigned-identifiers-1.2.0.tgz", "integrity": "sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ==", "dev": true }, "get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true }, "get-func-name": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", "dev": true }, "get-intrinsic": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", "dev": true, "requires": { "function-bind": "^1.1.1", "has": "^1.0.3", "has-symbols": "^1.0.1" } }, "get-symbol-description": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", "dev": true, "requires": { "call-bind": "^1.0.2", "get-intrinsic": "^1.1.1" } }, "glob": { "version": "7.1.7", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", "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" } }, "glob-parent": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, "requires": { "is-glob": "^4.0.1" } }, "globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true }, "graceful-fs": { "version": "4.2.6", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", "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 }, "has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "dev": true, "requires": { "function-bind": "^1.1.1" } }, "has-bigints": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", "dev": true }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, "has-symbols": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", "dev": true }, "has-tostringtag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", "dev": true, "requires": { "has-symbols": "^1.0.2" } }, "hash-base": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", "dev": true, "requires": { "inherits": "^2.0.4", "readable-stream": "^3.6.0", "safe-buffer": "^5.2.0" }, "dependencies": { "readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "dev": true, "requires": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } } } }, "hash.js": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", "dev": true, "requires": { "inherits": "^2.0.3", "minimalistic-assert": "^1.0.1" } }, "hasha": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/hasha/-/hasha-3.0.0.tgz", "integrity": "sha1-UqMvq4Vp1BymmmH/GiFPjrfIvTk=", "dev": true, "requires": { "is-stream": "^1.0.1" } }, "he": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "dev": true }, "highlight.js": { "version": "11.0.1", "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.0.1.tgz", "integrity": "sha512-EqYpWyTF2s8nMfttfBA2yLKPNoZCO33pLS4MnbXQ4hECf1TKujCt1Kq7QAdrio7roL4+CqsfjqwYj4tYgq0pJQ==", "dev": true }, "hmac-drbg": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", "dev": true, "requires": { "hash.js": "^1.0.3", "minimalistic-assert": "^1.0.0", "minimalistic-crypto-utils": "^1.0.1" } }, "hosted-git-info": { "version": "2.8.9", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", "dev": true }, "html-escaper": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true }, "htmlescape": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/htmlescape/-/htmlescape-1.1.1.tgz", "integrity": "sha1-OgPtwiFLyjtmQko+eVk0lQnLA1E=", "dev": true }, "http-link-header": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/http-link-header/-/http-link-header-1.0.5.tgz", "integrity": "sha512-msKrMbv/xHzhdOD4sstbEr+NbGqpv8ZtZliiCeByGENJo1jK1GZ/81zHF9HpWtEH5ihovPpdqHXniwZapJCKEA==", "dev": true }, "https-browserify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", "dev": true }, "iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, "requires": { "safer-buffer": ">= 2.1.2 < 3" } }, "ieee754": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", "dev": true }, "ignore": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", "dev": true }, "import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, "requires": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" } }, "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.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, "inline-source-map": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/inline-source-map/-/inline-source-map-0.6.2.tgz", "integrity": "sha1-+Tk0ccGKedFyT4Y/o4tYY3Ct4qU=", "dev": true, "requires": { "source-map": "~0.5.3" } }, "inquirer": { "version": "6.5.2", "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz", "integrity": "sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==", "dev": true, "requires": { "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" }, "dependencies": { "ansi-regex": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", "dev": true }, "strip-ansi": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dev": true, "requires": { "ansi-regex": "^4.1.0" } } } }, "insert-module-globals": { "version": "7.2.1", "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-7.2.1.tgz", "integrity": "sha512-ufS5Qq9RZN+Bu899eA9QCAYThY+gGW7oRkmb0vC93Vlyu/CFGcH0OYPEjVkDXA5FEbTt1+VWzdoOD3Ny9N+8tg==", "dev": true, "requires": { "acorn-node": "^1.5.2", "combine-source-map": "^0.8.0", "concat-stream": "^1.6.1", "is-buffer": "^1.1.0", "JSONStream": "^1.0.3", "path-is-absolute": "^1.0.1", "process": "~0.11.0", "through2": "^2.0.0", "undeclared-identifiers": "^1.1.2", "xtend": "^4.0.0" } }, "internal-slot": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", "dev": true, "requires": { "get-intrinsic": "^1.1.0", "has": "^1.0.3", "side-channel": "^1.0.4" } }, "is-arguments": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", "dev": true, "requires": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" } }, "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", "dev": true }, "is-bigint": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.2.tgz", "integrity": "sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA==", "dev": true }, "is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, "requires": { "binary-extensions": "^2.0.0" } }, "is-boolean-object": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.1.tgz", "integrity": "sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng==", "dev": true, "requires": { "call-bind": "^1.0.2" } }, "is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", "dev": true }, "is-callable": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", "dev": true }, "is-core-module": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz", "integrity": "sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==", "dev": true, "requires": { "has": "^1.0.3" } }, "is-date-object": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.4.tgz", "integrity": "sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A==", "dev": true }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", "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 }, "is-generator-function": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", "dev": true, "requires": { "has-tostringtag": "^1.0.0" } }, "is-glob": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", "dev": true, "requires": { "is-extglob": "^2.1.1" } }, "is-negative-zero": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", "dev": true }, "is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true }, "is-number-object": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.5.tgz", "integrity": "sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw==", "dev": true }, "is-plain-obj": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", "dev": true }, "is-plain-object": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dev": true, "requires": { "isobject": "^3.0.1" } }, "is-regex": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "dev": true, "requires": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" } }, "is-shared-array-buffer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz", "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==", "dev": true }, "is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", "dev": true }, "is-string": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", "dev": true, "requires": { "has-tostringtag": "^1.0.0" } }, "is-symbol": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", "dev": true, "requires": { "has-symbols": "^1.0.2" } }, "is-typed-array": { "version": "1.1.8", "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.8.tgz", "integrity": "sha512-HqH41TNZq2fgtGT8WHVFVJhBVGuY3AnP3Q36K8JKXUxSxRgk/d+7NjmwG2vo2mYmXK8UYZKu0qH8bVP5gEisjA==", "dev": true, "requires": { "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", "es-abstract": "^1.18.5", "foreach": "^2.0.5", "has-tostringtag": "^1.0.0" } }, "is-unicode-supported": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "dev": true }, "is-weakref": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.1.tgz", "integrity": "sha512-b2jKc2pQZjaeFYWEf7ScFj+Be1I+PXmlu572Q8coTXZ+LD/QQZ7ShPMst8h16riVgyXTQwUsFEl74mDvc/3MHQ==", "dev": true, "requires": { "call-bind": "^1.0.0" } }, "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=", "dev": true }, "isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true }, "istanbul-lib-coverage": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==", "dev": true }, "istanbul-lib-hook": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-2.0.7.tgz", "integrity": "sha512-vrRztU9VRRFDyC+aklfLoeXyNdTfga2EI3udDGn4cZ6fpSXpHLV9X6CHvfoMCPtggg8zvDDmC4b9xfu0z6/llA==", "dev": true, "requires": { "append-transform": "^1.0.0" } }, "istanbul-lib-instrument": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz", "integrity": "sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA==", "dev": true, "requires": { "@babel/generator": "^7.4.0", "@babel/parser": "^7.4.3", "@babel/template": "^7.4.0", "@babel/traverse": "^7.4.3", "@babel/types": "^7.4.0", "istanbul-lib-coverage": "^2.0.5", "semver": "^6.0.0" }, "dependencies": { "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true } } }, "istanbul-lib-report": { "version": "2.0.8", "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz", "integrity": "sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ==", "dev": true, "requires": { "istanbul-lib-coverage": "^2.0.5", "make-dir": "^2.1.0", "supports-color": "^6.1.0" }, "dependencies": { "supports-color": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", "dev": true, "requires": { "has-flag": "^3.0.0" } } } }, "istanbul-lib-source-maps": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz", "integrity": "sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw==", "dev": true, "requires": { "debug": "^4.1.1", "istanbul-lib-coverage": "^2.0.5", "make-dir": "^2.1.0", "rimraf": "^2.6.3", "source-map": "^0.6.1" }, "dependencies": { "debug": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", "dev": true, "requires": { "ms": "2.1.2" } }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true } } }, "istanbul-reports": { "version": "2.2.7", "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-2.2.7.tgz", "integrity": "sha512-uu1F/L1o5Y6LzPVSVZXNOoD/KXpJue9aeLRd0sM9uMXfZvzomB0WxVamWb5ue8kA2vVWEmW7EG+A5n3f1kqHKg==", "dev": true, "requires": { "html-escaper": "^2.0.0" } }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "dev": true }, "js-yaml": { "version": "3.14.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, "requires": { "argparse": "^1.0.7", "esprima": "^4.0.0" } }, "jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", "dev": true }, "json-parse-better-errors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", "dev": true }, "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==", "dev": true }, "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-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", "dev": true }, "json5": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", "dev": true, "requires": { "minimist": "^1.2.5" } }, "jsonfile": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dev": true, "requires": { "graceful-fs": "^4.1.6", "universalify": "^2.0.0" } }, "jsonify": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", "dev": true }, "jsonld-context-parser": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/jsonld-context-parser/-/jsonld-context-parser-2.2.0.tgz", "integrity": "sha512-h4ykp8iUOV4Xm6MgS1zVrytyw/dNVgOeofMCcD/5mHPng3i49qAsaomLT0BOXqYas7lwITVT5c6NZIRVMdXfVQ==", "dev": true, "requires": { "@types/http-link-header": "^1.0.1", "@types/node": "^18.0.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": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/jsonld-streaming-parser/-/jsonld-streaming-parser-3.0.0.tgz", "integrity": "sha512-n+IW+gTIw2UeXWXdN0ZlPY4DvKANUCrV0HOagXOsDUCvkO/SiDcYOZn2hrDkBGKm7yD5sefvvG3d/FxbeepbuA==", "dev": true, "requires": { "@rdfjs/types": "*", "@types/http-link-header": "^1.0.1", "@types/readable-stream": "^2.3.13", "buffer": "^6.0.3", "canonicalize": "^1.0.1", "http-link-header": "^1.0.2", "jsonld-context-parser": "^2.1.3", "jsonparse": "^1.3.1", "rdf-data-factory": "^1.1.0", "readable-stream": "^4.0.0" }, "dependencies": { "buffer": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", "dev": true, "requires": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" } } } }, "jsonparse": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", "dev": true }, "JSONStream": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", "dev": true, "requires": { "jsonparse": "^1.2.0", "through": ">=2.2.7 <3" } }, "kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true }, "labeled-stream-splicer": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-2.0.2.tgz", "integrity": "sha512-Ca4LSXFFZUjPScRaqOcFxneA0VpKZr4MMYCljyQr4LIewTLb3Y0IUTIsnBBsVubIeEfxeSZpSjSsRM8APEQaAw==", "dev": true, "requires": { "inherits": "^2.0.1", "stream-splicer": "^2.0.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" } }, "load-json-file": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", "dev": true, "requires": { "graceful-fs": "^4.1.2", "parse-json": "^4.0.0", "pify": "^3.0.0", "strip-bom": "^3.0.0" }, "dependencies": { "pify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", "dev": true } } }, "locate-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, "requires": { "p-locate": "^3.0.0", "path-exists": "^3.0.0" } }, "lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, "lodash.debounce": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", "dev": true }, "lodash.flattendeep": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=", "dev": true }, "lodash.memoize": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-3.0.4.tgz", "integrity": "sha1-LcvSwofLwKVcxCMovQxzYVDVPj8=", "dev": true }, "log-symbols": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz", "integrity": "sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==", "dev": true, "requires": { "chalk": "^4.0.0" }, "dependencies": { "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { "color-convert": "^2.0.1" } }, "chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { "color-name": "~1.1.4" } }, "color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { "has-flag": "^4.0.0" } } } }, "lru-cache": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", "dev": true, "requires": { "pseudomap": "^1.0.2", "yallist": "^2.1.2" } }, "make-dir": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", "dev": true, "requires": { "pify": "^4.0.1", "semver": "^5.6.0" } }, "marked": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/marked/-/marked-2.1.3.tgz", "integrity": "sha512-/Q+7MGzaETqifOMWYEA7HVMaZb4XbcRfaOzcSsHZEith83KGlvaSG33u0SKu89Mj5h+T8V2hM+8O45Qc5XTgwA==", "dev": true }, "md5.js": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", "dev": true, "requires": { "hash-base": "^3.0.0", "inherits": "^2.0.1", "safe-buffer": "^5.1.2" } }, "merge-source-map": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz", "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==", "dev": true, "requires": { "source-map": "^0.6.1" }, "dependencies": { "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true } } }, "miller-rabin": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", "dev": true, "requires": { "bn.js": "^4.0.0", "brorand": "^1.0.1" }, "dependencies": { "bn.js": { "version": "4.12.0", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", "dev": true } } }, "mimic-fn": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", "dev": true }, "minimalistic-assert": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", "dev": true }, "minimalistic-crypto-utils": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", "dev": true }, "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.5", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", "dev": true }, "mkdirp": { "version": "0.5.5", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", "dev": true, "requires": { "minimist": "^1.2.5" } }, "mkdirp-classic": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", "dev": true }, "mocha": { "version": "8.4.0", "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.4.0.tgz", "integrity": "sha512-hJaO0mwDXmZS4ghXsvPVriOhsxQ7ofcpQdm8dE+jISUOKopitvnXFQmpRR7jd2K6VBG6E26gU3IAbXXGIbu4sQ==", "dev": true, "requires": { "@ungap/promise-all-settled": "1.1.2", "ansi-colors": "4.1.1", "browser-stdout": "1.3.1", "chokidar": "3.5.1", "debug": "4.3.1", "diff": "5.0.0", "escape-string-regexp": "4.0.0", "find-up": "5.0.0", "glob": "7.1.6", "growl": "1.10.5", "he": "1.2.0", "js-yaml": "4.0.0", "log-symbols": "4.0.0", "minimatch": "3.0.4", "ms": "2.1.3", "nanoid": "3.1.20", "serialize-javascript": "5.0.1", "strip-json-comments": "3.1.1", "supports-color": "8.1.1", "which": "2.0.2", "wide-align": "1.1.3", "workerpool": "6.1.0", "yargs": "16.2.0", "yargs-parser": "20.2.4", "yargs-unparser": "2.0.0" }, "dependencies": { "ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { "color-convert": "^2.0.1" } }, "argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, "chokidar": { "version": "3.5.1", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", "dev": true, "requires": { "anymatch": "~3.1.1", "braces": "~3.0.2", "fsevents": "~2.3.1", "glob-parent": "~5.1.0", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", "readdirp": "~3.5.0" } }, "cliui": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dev": true, "requires": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", "wrap-ansi": "^7.0.0" } }, "color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { "color-name": "~1.1.4" } }, "color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "debug": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", "dev": true, "requires": { "ms": "2.1.2" }, "dependencies": { "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true } } }, "emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, "escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true }, "find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "requires": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" } }, "glob": { "version": "7.1.6", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", "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" } }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, "is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true }, "js-yaml": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.0.0.tgz", "integrity": "sha512-pqon0s+4ScYUvX30wxQi3PogGFAlUyH0awepWvwkj4jD4v+ova3RiYw8bmA6x2rDrEaj8i/oWKoRxpVNW+Re8Q==", "dev": true, "requires": { "argparse": "^2.0.1" } }, "locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, "requires": { "p-locate": "^5.0.0" } }, "ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true }, "p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "requires": { "yocto-queue": "^0.1.0" } }, "p-locate": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, "requires": { "p-limit": "^3.0.2" } }, "path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true }, "string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "requires": { "ansi-regex": "^5.0.1" } }, "strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true }, "supports-color": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "requires": { "has-flag": "^4.0.0" } }, "which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, "requires": { "isexe": "^2.0.0" } }, "wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, "requires": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true }, "yargs": { "version": "16.2.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, "requires": { "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" } }, "yargs-parser": { "version": "20.2.4", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", "dev": true } } }, "module-deps": { "version": "6.2.3", "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-6.2.3.tgz", "integrity": "sha512-fg7OZaQBcL4/L+AK5f4iVqf9OMbCclXfy/znXRxTVhJSeW5AIlS9AwheYwDaXM3lVW7OBeaeUEY3gbaC6cLlSA==", "dev": true, "requires": { "browser-resolve": "^2.0.0", "cached-path-relative": "^1.0.2", "concat-stream": "~1.6.0", "defined": "^1.0.0", "detective": "^5.2.0", "duplexer2": "^0.1.2", "inherits": "^2.0.1", "JSONStream": "^1.0.3", "parents": "^1.0.0", "readable-stream": "^2.0.2", "resolve": "^1.4.0", "stream-combiner2": "^1.1.1", "subarg": "^1.0.0", "through2": "^2.0.0", "xtend": "^4.0.0" }, "dependencies": { "readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "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.1.1", "util-deprecate": "~1.0.1" } }, "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==", "dev": true }, "string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { "safe-buffer": "~5.1.0" } } } }, "mute-stream": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", "dev": true }, "n3": { "version": "1.16.2", "resolved": "https://registry.npmjs.org/n3/-/n3-1.16.2.tgz", "integrity": "sha512-5vYa2HuNEJ+a26FEs4FGgfFLgaPOODaZpJlc7FS0eUjDumc4uK0cvx216PjKXBkLzmAsSqGgQPwqztcLLvwDsw==", "dev": true, "requires": { "queue-microtask": "^1.1.2", "readable-stream": "^3.6.0" }, "dependencies": { "readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "dev": true, "requires": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } } } }, "nanoid": { "version": "3.1.20", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.20.tgz", "integrity": "sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw==", "dev": 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 }, "nested-error-stacks": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-2.1.0.tgz", "integrity": "sha512-AO81vsIO1k1sM4Zrd6Hu7regmJN1NSiAja10gc4bX3F0wd+9rQmcuHQaHVQCYIEC8iFXnE+mavh23GOt7wBgug==", "dev": true }, "nice-try": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", "dev": true }, "node-fetch": { "version": "2.6.7", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", "dev": true, "requires": { "whatwg-url": "^5.0.0" } }, "node-modules-regexp": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", "dev": true }, "node-releases": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz", "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==", "dev": true }, "normalize-package-data": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, "requires": { "hosted-git-info": "^2.1.4", "resolve": "^1.10.0", "semver": "2 || 3 || 4 || 5", "validate-npm-package-license": "^3.0.1" } }, "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true }, "nyc": { "version": "14.1.1", "resolved": "https://registry.npmjs.org/nyc/-/nyc-14.1.1.tgz", "integrity": "sha512-OI0vm6ZGUnoGZv/tLdZ2esSVzDwUC88SNs+6JoSOMVxA+gKMB8Tk7jBwgemLx4O40lhhvZCVw1C+OYLOBOPXWw==", "dev": true, "requires": { "archy": "^1.0.0", "caching-transform": "^3.0.2", "convert-source-map": "^1.6.0", "cp-file": "^6.2.0", "find-cache-dir": "^2.1.0", "find-up": "^3.0.0", "foreground-child": "^1.5.6", "glob": "^7.1.3", "istanbul-lib-coverage": "^2.0.5", "istanbul-lib-hook": "^2.0.7", "istanbul-lib-instrument": "^3.3.0", "istanbul-lib-report": "^2.0.8", "istanbul-lib-source-maps": "^3.0.6", "istanbul-reports": "^2.2.4", "js-yaml": "^3.13.1", "make-dir": "^2.1.0", "merge-source-map": "^1.1.0", "resolve-from": "^4.0.0", "rimraf": "^2.6.3", "signal-exit": "^3.0.2", "spawn-wrap": "^1.4.2", "test-exclude": "^5.2.3", "uuid": "^3.3.2", "yargs": "^13.2.2", "yargs-parser": "^13.0.0" } }, "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 }, "object-inspect": { "version": "1.11.0", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==", "dev": true }, "object-keys": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true }, "object.assign": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", "dev": true, "requires": { "call-bind": "^1.0.0", "define-properties": "^1.1.3", "has-symbols": "^1.0.1", "object-keys": "^1.1.1" } }, "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": "2.0.1", "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", "dev": true, "requires": { "mimic-fn": "^1.0.0" } }, "optionator": { "version": "0.8.3", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", "dev": true, "requires": { "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-browserify": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", "dev": true }, "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 }, "os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", "dev": true }, "p-limit": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "requires": { "p-try": "^2.0.0" } }, "p-locate": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, "requires": { "p-limit": "^2.0.0" } }, "p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true }, "package-hash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-3.0.0.tgz", "integrity": "sha512-lOtmukMDVvtkL84rJHI7dpTYq+0rli8N2wlnqUcBuDWCfVhRUfOmnR9SsoHFMLpACvEV60dX7rd0rFaYDZI+FA==", "dev": true, "requires": { "graceful-fs": "^4.1.15", "hasha": "^3.0.0", "lodash.flattendeep": "^4.4.0", "release-zalgo": "^1.0.0" } }, "pako": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", "dev": true }, "parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, "requires": { "callsites": "^3.0.0" } }, "parents": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parents/-/parents-1.0.1.tgz", "integrity": "sha1-/t1NK/GTp3dF/nHjcdc8MwfZx1E=", "dev": true, "requires": { "path-platform": "~0.11.15" } }, "parse-asn1": { "version": "5.1.6", "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", "dev": true, "requires": { "asn1.js": "^5.2.0", "browserify-aes": "^1.0.0", "evp_bytestokey": "^1.0.0", "pbkdf2": "^3.0.3", "safe-buffer": "^5.1.1" } }, "parse-json": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", "dev": true, "requires": { "error-ex": "^1.3.1", "json-parse-better-errors": "^1.0.1" } }, "path-browserify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", "dev": true }, "path-exists": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", "dev": true }, "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-key": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", "dev": true }, "path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, "path-platform": { "version": "0.11.15", "resolved": "https://registry.npmjs.org/path-platform/-/path-platform-0.11.15.tgz", "integrity": "sha1-6GQhf3TDaFDwhSt43Hv31KVyG/I=", "dev": true }, "path-type": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", "dev": true, "requires": { "pify": "^3.0.0" }, "dependencies": { "pify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", "dev": true } } }, "pathval": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", "dev": true }, "pbkdf2": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", "dev": true, "requires": { "create-hash": "^1.1.2", "create-hmac": "^1.1.4", "ripemd160": "^2.0.1", "safe-buffer": "^5.0.1", "sha.js": "^2.4.8" } }, "picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", "dev": true }, "picomatch": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", "dev": true }, "pify": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", "dev": true }, "pirates": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", "dev": true, "requires": { "node-modules-regexp": "^1.0.0" } }, "pkg-dir": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", "dev": true, "requires": { "find-up": "^3.0.0" } }, "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" }, "dependencies": { "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" } }, "which": { "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" } } } }, "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": { "version": "0.11.10", "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", "dev": true }, "process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, "progress": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "dev": true }, "promise-polyfill": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/promise-polyfill/-/promise-polyfill-1.1.6.tgz", "integrity": "sha1-zQTv9G9clcOn0EVZHXm14+AfEtc=", "dev": true }, "pseudomap": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", "dev": true }, "public-encrypt": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", "dev": true, "requires": { "bn.js": "^4.1.0", "browserify-rsa": "^4.0.0", "create-hash": "^1.1.0", "parse-asn1": "^5.0.0", "randombytes": "^2.0.1", "safe-buffer": "^5.1.2" }, "dependencies": { "bn.js": { "version": "4.12.0", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", "dev": true } } }, "punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", "dev": true }, "querystring": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", "dev": true }, "querystring-es3": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", "dev": true }, "queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" }, "randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dev": true, "requires": { "safe-buffer": "^5.1.0" } }, "randomfill": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", "dev": true, "requires": { "randombytes": "^2.0.5", "safe-buffer": "^5.1.0" } }, "rdf-data-factory": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/rdf-data-factory/-/rdf-data-factory-1.1.1.tgz", "integrity": "sha512-0HoLx7lbBlNd2YTmNKin0txgiYmAV56eVU823at8cG2+iD0Ia5kcRNDpzZy6I/HCtFTymHvTfdhHTzm3ak3Jpw==", "dev": true, "requires": { "@rdfjs/types": "*" } }, "rdf-isomorphic": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/rdf-isomorphic/-/rdf-isomorphic-1.3.0.tgz", "integrity": "sha512-3BRwUwCNHHR8//bqmVH+knTFVbVfkp7CWyQk7qPHHA8JriXBYxrab21OomjJx/2KF21w8bWz344mgNYEaQABYQ==", "dev": true, "requires": { "@rdfjs/types": "*", "hash.js": "^1.1.7", "rdf-string": "^1.6.0", "rdf-terms": "^1.7.0" } }, "rdf-js": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/rdf-js/-/rdf-js-4.0.2.tgz", "integrity": "sha512-ApvlFa/WsQh8LpPK/6hctQwG06Z9ztQQGWVtrcrf9L6+sejHNXLPOqL+w7q3hF+iL0C4sv3AX1PUtGkLNzyZ0Q==", "dev": true, "requires": { "@rdfjs/types": "*" } }, "rdf-literal": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/rdf-literal/-/rdf-literal-1.3.0.tgz", "integrity": "sha512-5u5L4kPYNZANie5AE4gCXqwpNO/p9E/nUcDurk05XAOJT/pt9rQlDk6+BX7j3dNSee3h9GS4xlLoWxQDj7sXtg==", "dev": true, "requires": { "@rdfjs/types": "*", "rdf-data-factory": "^1.1.0" } }, "rdf-object": { "version": "1.13.1", "resolved": "https://registry.npmjs.org/rdf-object/-/rdf-object-1.13.1.tgz", "integrity": "sha512-Sgq+GbsqdPsMYh+d4OZ4C9brXlzqa9MvfVHG4pkuT9p7o+AX39nqjTWE/8HVaXjjOZBIDe8T54WWTMWphu3BpA==", "dev": true, "requires": { "@rdfjs/types": "*", "jsonld-context-parser": "^2.0.2", "rdf-data-factory": "^1.1.0", "rdf-string": "^1.6.0", "streamify-array": "^1.0.1" } }, "rdf-quad": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/rdf-quad/-/rdf-quad-1.5.0.tgz", "integrity": "sha512-LnCYx8XbRVW1wr6UiZPSy2Tv7bXAtEwuyck/68dANhFu8VMnGS+QfUNP3b9YI6p4Bfd/fyDx5E3x81IxGV6BzA==", "dev": true, "requires": { "rdf-data-factory": "^1.0.1", "rdf-literal": "^1.2.0", "rdf-string": "^1.5.0" } }, "rdf-string": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/rdf-string/-/rdf-string-1.6.1.tgz", "integrity": "sha512-EDNVQs9jDgm4hkY8TZLhQI3rYUduecMRxLu3szldAdS2CHEo8aFqlHcZDFgBcaJN2XJWoRJU8YQT85wmb8gPEA==", "dev": true, "requires": { "@rdfjs/types": "*", "rdf-data-factory": "^1.1.0" } }, "rdf-terms": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/rdf-terms/-/rdf-terms-1.9.0.tgz", "integrity": "sha512-FGMPOIpr6vEN8gWd/dVuPpcE/7k+u4Ufqi8FvM5lczjhduT1MN9Shmrw50fWCpHFVE4n0T3lV0qti1PCaHxAfg==", "dev": true, "requires": { "@rdfjs/types": "*", "rdf-data-factory": "^1.1.0", "rdf-string": "^1.6.0" } }, "rdf-test-suite": { "version": "1.19.2", "resolved": "https://registry.npmjs.org/rdf-test-suite/-/rdf-test-suite-1.19.2.tgz", "integrity": "sha512-Qvbf05SfcNcvwFzroBVSVf51zS6R74GaQmX43UwXKNxVWMoDyZlgXWLfznDtTJW2HfahnFkTsyosxrliN1zZ1Q==", "dev": true, "requires": { "@rdfjs/types": "*", "@types/json-stable-stringify": "^1.0.32", "@types/log-symbols": "^3.0.0", "@types/minimist": "^1.2.0", "@types/n3": "^1.10.3", "@types/sax": "^1.0.1", "arrayify-stream": "^2.0.0", "cross-fetch": "^3.0.6", "is-stream": "^2.0.0", "json-stable-stringify": "^1.0.1", "jsonld-streaming-parser": "^3.0.0", "log-symbols": "^4.0.0", "minimist": "^1.2.0", "n3": "^1.11.1", "rdf-data-factory": "^1.1.0", "rdf-isomorphic": "^1.3.0", "rdf-literal": "^1.3.0", "rdf-object": "^1.11.1", "rdf-quad": "^1.5.0", "rdf-string": "^1.6.0", "rdf-terms": "^1.7.0", "rdfxml-streaming-parser": "^2.0.0", "readable-web-to-node-stream": "^3.0.2", "relative-to-absolute-iri": "^1.0.6", "sparqljson-parse": "^2.0.1", "sparqlxml-parse": "^2.0.1", "stream-to-string": "^1.1.0", "streamify-string": "^1.0.1" }, "dependencies": { "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { "color-convert": "^2.0.1" } }, "arrayify-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/arrayify-stream/-/arrayify-stream-2.0.0.tgz", "integrity": "sha512-Z2NRtxpWQIz3NRA2bEZOziIungBH+fpsFFEolc5u8uVRheYitvsDNvejlfyh/hjZ9VyS9Ba62oY0zc5oa6Wu7g==", "dev": true }, "chalk": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { "color-name": "~1.1.4" } }, "color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, "is-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true }, "log-symbols": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dev": true, "requires": { "chalk": "^4.1.0", "is-unicode-supported": "^0.1.0" } }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { "has-flag": "^4.0.0" } } } }, "rdfxml-streaming-parser": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/rdfxml-streaming-parser/-/rdfxml-streaming-parser-2.1.0.tgz", "integrity": "sha512-G2kYXekAy7TUE5G6PAI5/Y/5ugqwFkA+305dcqbnRqqnK+a5gq2ubLGGmxJIIIEFbcFoUZ5UfQRHvqZdsWC8xQ==", "dev": true, "requires": { "@rdfjs/types": "*", "@types/readable-stream": "^2.3.13", "buffer": "^6.0.3", "rdf-data-factory": "^1.1.0", "readable-stream": "^4.0.0", "relative-to-absolute-iri": "^1.0.0", "saxes": "^6.0.0" }, "dependencies": { "buffer": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", "dev": true, "requires": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" } } } }, "read-only-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/read-only-stream/-/read-only-stream-2.0.0.tgz", "integrity": "sha1-JyT9aoET1zdkrCiNQ4YnDB2/F/A=", "dev": true, "requires": { "readable-stream": "^2.0.2" }, "dependencies": { "readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "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.1.1", "util-deprecate": "~1.0.1" } }, "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==", "dev": true }, "string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { "safe-buffer": "~5.1.0" } } } }, "read-pkg": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", "dev": true, "requires": { "load-json-file": "^4.0.0", "normalize-package-data": "^2.3.2", "path-type": "^3.0.0" } }, "read-pkg-up": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-4.0.0.tgz", "integrity": "sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA==", "dev": true, "requires": { "find-up": "^3.0.0", "read-pkg": "^3.0.0" } }, "readable-stream": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.1.0.tgz", "integrity": "sha512-sVisi3+P2lJ2t0BPbpK629j8wRW06yKGJUcaLAGXPAUhyUxVJm7VsCTit1PFgT4JHUDMrGNR+ZjSKpzGaRF3zw==", "requires": { "abort-controller": "^3.0.0" } }, "readable-web-to-node-stream": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz", "integrity": "sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==", "dev": true, "requires": { "readable-stream": "^3.6.0" }, "dependencies": { "readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "dev": true, "requires": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } } } }, "readdirp": { "version": "3.5.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", "dev": true, "requires": { "picomatch": "^2.2.1" } }, "regenerate": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", "dev": true }, "regenerate-unicode-properties": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-9.0.0.tgz", "integrity": "sha512-3E12UeNSPfjrgwjkR81m5J7Aw/T55Tu7nUyZVQYCKEOs+2dkxEY+DpPtZzO4YruuiPb7NkYLVcyJC4+zCbk5pA==", "dev": true, "requires": { "regenerate": "^1.4.2" } }, "regenerator-runtime": { "version": "0.13.9", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==", "dev": true }, "regenerator-transform": { "version": "0.14.5", "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", "dev": true, "requires": { "@babel/runtime": "^7.8.4" } }, "regexpp": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", "dev": true }, "regexpu-core": { "version": "4.8.0", "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.8.0.tgz", "integrity": "sha512-1F6bYsoYiz6is+oz70NWur2Vlh9KWtswuRuzJOfeYUrfPX2o8n74AnUVaOGDbUqVGO9fNHu48/pjJO4sNVwsOg==", "dev": true, "requires": { "regenerate": "^1.4.2", "regenerate-unicode-properties": "^9.0.0", "regjsgen": "^0.5.2", "regjsparser": "^0.7.0", "unicode-match-property-ecmascript": "^2.0.0", "unicode-match-property-value-ecmascript": "^2.0.0" } }, "regjsgen": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==", "dev": true }, "regjsparser": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.7.0.tgz", "integrity": "sha512-A4pcaORqmNMDVwUjWoTzuhwMGpP+NykpfqAsEgI1FSH/EzC7lrN5TMd+kN8YCovX+jMpu8eaqXgXPCa0g8FQNQ==", "dev": true, "requires": { "jsesc": "~0.5.0" }, "dependencies": { "jsesc": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", "dev": true } } }, "relative-to-absolute-iri": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/relative-to-absolute-iri/-/relative-to-absolute-iri-1.0.6.tgz", "integrity": "sha512-Xw5/Zx6iWSCMJUXwXVOjySjH8Xli4hVFL9QQFvkl1qEmFBG94J+QUI9emnoctOCD3285f1jNV+QWV9eDYwIdfQ==", "dev": true }, "release-zalgo": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", "integrity": "sha1-CXALflB0Mpc5Mw5TXFqQ+2eFFzA=", "dev": true, "requires": { "es6-error": "^4.0.1" } }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", "dev": true }, "require-main-filename": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", "dev": true }, "resolve": { "version": "1.20.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", "dev": true, "requires": { "is-core-module": "^2.2.0", "path-parse": "^1.0.6" } }, "resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true }, "restore-cursor": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", "dev": true, "requires": { "onetime": "^2.0.0", "signal-exit": "^3.0.2" } }, "rimraf": { "version": "2.6.3", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", "dev": true, "requires": { "glob": "^7.1.3" } }, "ripemd160": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", "dev": true, "requires": { "hash-base": "^3.0.0", "inherits": "^2.0.1" } }, "run-async": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", "dev": true }, "rxjs": { "version": "6.6.7", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", "dev": true, "requires": { "tslib": "^1.9.0" } }, "safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "dev": true }, "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true }, "saxes": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", "dev": true, "requires": { "xmlchars": "^2.2.0" } }, "semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true }, "serialize-javascript": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", "dev": true, "requires": { "randombytes": "^2.1.0" } }, "set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", "dev": true }, "sha.js": { "version": "2.4.11", "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", "dev": true, "requires": { "inherits": "^2.0.1", "safe-buffer": "^5.0.1" } }, "shallow-clone": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", "dev": true, "requires": { "kind-of": "^6.0.2" } }, "shasum-object": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/shasum-object/-/shasum-object-1.0.0.tgz", "integrity": "sha512-Iqo5rp/3xVi6M4YheapzZhhGPVs0yZwHj7wvwQ1B9z8H6zk+FEnI7y3Teq7qwnekfEhu8WmG2z0z4iWZaxLWVg==", "dev": true, "requires": { "fast-safe-stringify": "^2.0.7" } }, "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 }, "shell-quote": { "version": "1.7.3", "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.3.tgz", "integrity": "sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==", "dev": true }, "side-channel": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", "dev": true, "requires": { "call-bind": "^1.0.0", "get-intrinsic": "^1.0.2", "object-inspect": "^1.9.0" } }, "signal-exit": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", "dev": true }, "simple-concat": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", "dev": true }, "slash": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", "dev": true }, "slice-ansi": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", "dev": true, "requires": { "ansi-styles": "^3.2.0", "astral-regex": "^1.0.0", "is-fullwidth-code-point": "^2.0.0" } }, "source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", "dev": true }, "source-map-support": { "version": "0.5.19", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", "dev": true, "requires": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" }, "dependencies": { "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true } } }, "sparqljson-parse": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/sparqljson-parse/-/sparqljson-parse-2.1.0.tgz", "integrity": "sha512-JKyoDNDR9xrJwR6x6N41UWfER6kfeirE9BRBHdSFSfQF3eF3pxpuUTcJ6QGwHQ4wC/JsQdG/4OGmzkuk1B+8gg==", "dev": true, "requires": { "@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" }, "dependencies": { "buffer": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", "dev": true, "requires": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" } } } }, "sparqlxml-parse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/sparqlxml-parse/-/sparqlxml-parse-2.0.1.tgz", "integrity": "sha512-7HZMm0l9a+NQW6mEHzur+KEXA2/gpLYsyiq9yMLKa7Us8yfUJG/+fbHmuBoN7yE0t41SfCXtq4EU/nDjFSGudw==", "dev": true, "requires": { "@rdfjs/types": "*", "@types/readable-stream": "^2.3.13", "buffer": "^6.0.3", "rdf-data-factory": "^1.1.0", "readable-stream": "^4.0.0", "saxes": "^6.0.0" }, "dependencies": { "buffer": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", "dev": true, "requires": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" } } } }, "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" } }, "spawn-wrap": { "version": "1.4.3", "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-1.4.3.tgz", "integrity": "sha512-IgB8md0QW/+tWqcavuFgKYR/qIRvJkRLPJDFaoXtLLUaVcCDK0+HeFTkmQHj3eprcYhc+gOl0aEA1w7qZlYezw==", "dev": true, "requires": { "foreground-child": "^1.5.6", "mkdirp": "^0.5.0", "os-homedir": "^1.0.1", "rimraf": "^2.6.2", "signal-exit": "^3.0.2", "which": "^1.3.0" } }, "spdx-correct": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", "dev": true, "requires": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" } }, "spdx-exceptions": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", "dev": true }, "spdx-expression-parse": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", "dev": true, "requires": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" } }, "spdx-license-ids": { "version": "3.0.9", "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.9.tgz", "integrity": "sha512-Ki212dKK4ogX+xDo4CtOZBVIwhsKBEfsEEcwmJfLQzirgc2jIWdzg40Unxz/HzEUqM1WFzVlQSMF9kZZ2HboLQ==", "dev": true }, "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "dev": true }, "stream-browserify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz", "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==", "dev": true, "requires": { "inherits": "~2.0.4", "readable-stream": "^3.5.0" }, "dependencies": { "readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "dev": true, "requires": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } } } }, "stream-combiner2": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz", "integrity": "sha1-+02KFCDqNidk4hrUeAOXvry0HL4=", "dev": true, "requires": { "duplexer2": "~0.1.0", "readable-stream": "^2.0.2" }, "dependencies": { "readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "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.1.1", "util-deprecate": "~1.0.1" } }, "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==", "dev": true }, "string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { "safe-buffer": "~5.1.0" } } } }, "stream-http": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-3.2.0.tgz", "integrity": "sha512-Oq1bLqisTyK3TSCXpPbT4sdeYNdmyZJv1LxpEm2vu1ZhK89kSE5YXwZc3cWk0MagGaKriBh9mCFbVGtO+vY29A==", "dev": true, "requires": { "builtin-status-codes": "^3.0.0", "inherits": "^2.0.4", "readable-stream": "^3.6.0", "xtend": "^4.0.2" }, "dependencies": { "readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "dev": true, "requires": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } } } }, "stream-splicer": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/stream-splicer/-/stream-splicer-2.0.1.tgz", "integrity": "sha512-Xizh4/NPuYSyAXyT7g8IvdJ9HJpxIGL9PjyhtywCZvvP0OPIdqyrr4dMikeuvY8xahpdKEBlBTySe583totajg==", "dev": true, "requires": { "inherits": "^2.0.1", "readable-stream": "^2.0.2" }, "dependencies": { "readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "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.1.1", "util-deprecate": "~1.0.1" } }, "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==", "dev": true }, "string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { "safe-buffer": "~5.1.0" } } } }, "stream-to-string": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/stream-to-string/-/stream-to-string-1.2.0.tgz", "integrity": "sha512-8drZlFIKBHSMdX9GCWv8V9AAWnQcTqw0iAI6/GC7UJ0H0SwKeFKjOoZfGY1tOU00GGU7FYZQoJ/ZCUEoXhD7yQ==", "dev": true, "requires": { "promise-polyfill": "^1.1.6" } }, "streamify-array": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/streamify-array/-/streamify-array-1.0.1.tgz", "integrity": "sha512-ZnswaBcC6B1bhPLSQOlC6CdaDUSzU0wr2lvvHpbHNms8V7+DLd8uEAzDAWpsjxbFkijBHhuObFO/qqu52DZUMA==", "dev": true }, "streamify-string": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/streamify-string/-/streamify-string-1.0.1.tgz", "integrity": "sha1-niIN4z4cR13TDgIG9bGBXMbJUls=", "dev": true }, "string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "dev": true, "requires": { "safe-buffer": "~5.2.0" } }, "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" } }, "string.prototype.trimend": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3" } }, "string.prototype.trimstart": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3" } }, "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" } }, "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=", "dev": true }, "subarg": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/subarg/-/subarg-1.0.0.tgz", "integrity": "sha1-9izxdYHplrSPyWVpn1TAauJouNI=", "dev": true, "requires": { "minimist": "^1.1.0" } }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "requires": { "has-flag": "^3.0.0" } }, "syntax-error": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-1.4.0.tgz", "integrity": "sha512-YPPlu67mdnHGTup2A8ff7BC2Pjq0e0Yp/IyTFN03zWO0RcK07uLcbi7C2KpGR2FvWbaB0+bfE27a+sBKebSo7w==", "dev": true, "requires": { "acorn-node": "^1.2.0" } }, "table": { "version": "5.4.6", "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", "dev": true, "requires": { "ajv": "^6.10.2", "lodash": "^4.17.14", "slice-ansi": "^2.1.0", "string-width": "^3.0.0" }, "dependencies": { "ansi-regex": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", "dev": true }, "string-width": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", "dev": true, "requires": { "emoji-regex": "^7.0.1", "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^5.1.0" } }, "strip-ansi": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dev": true, "requires": { "ansi-regex": "^4.1.0" } } } }, "test-exclude": { "version": "5.2.3", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-5.2.3.tgz", "integrity": "sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g==", "dev": true, "requires": { "glob": "^7.1.3", "minimatch": "^3.0.4", "read-pkg-up": "^4.0.0", "require-main-filename": "^2.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 }, "through2": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", "dev": true, "requires": { "readable-stream": "~2.3.6", "xtend": "~4.0.1" }, "dependencies": { "readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "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.1.1", "util-deprecate": "~1.0.1" } }, "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==", "dev": true }, "string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { "safe-buffer": "~5.1.0" } } } }, "timers-browserify": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-1.4.2.tgz", "integrity": "sha1-ycWLV1voQHN1y14kYtrO50NZ9B0=", "dev": true, "requires": { "process": "~0.11.0" } }, "tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", "dev": true, "requires": { "os-tmpdir": "~1.0.2" } }, "to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", "dev": true }, "to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, "requires": { "is-number": "^7.0.0" } }, "tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", "dev": true }, "tslib": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true }, "tty-browserify": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz", "integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==", "dev": true }, "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": "4.0.8", "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true }, "typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", "dev": true }, "uglify-js": { "version": "3.14.4", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.14.4.tgz", "integrity": "sha512-AbiSR44J0GoCeV81+oxcy/jDOElO2Bx3d0MfQCUShq7JRXaM4KtQopZsq2vFv8bCq2yMaGrw1FgygUd03RyRDA==", "dev": true }, "umd": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/umd/-/umd-3.0.3.tgz", "integrity": "sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow==", "dev": true }, "unbox-primitive": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", "dev": true, "requires": { "function-bind": "^1.1.1", "has-bigints": "^1.0.1", "has-symbols": "^1.0.2", "which-boxed-primitive": "^1.0.2" } }, "undeclared-identifiers": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/undeclared-identifiers/-/undeclared-identifiers-1.1.3.tgz", "integrity": "sha512-pJOW4nxjlmfwKApE4zvxLScM/njmwj/DiUBv7EabwE4O8kRUy+HIwxQtZLBPll/jx1LJyBcqNfB3/cpv9EZwOw==", "dev": true, "requires": { "acorn-node": "^1.3.0", "dash-ast": "^1.0.0", "get-assigned-identifiers": "^1.2.0", "simple-concat": "^1.0.0", "xtend": "^4.0.1" } }, "underscore": { "version": "1.13.1", "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.1.tgz", "integrity": "sha512-hzSoAVtJF+3ZtiFX0VgfFPHEDRm7Y/QPjGyNo4TVdnDTdft3tr8hEkD25a1jC+TjTuE7tkHGKkhwCgs9dgBB2g==", "dev": true }, "unicode-canonical-property-names-ecmascript": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", "dev": true }, "unicode-match-property-ecmascript": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", "dev": true, "requires": { "unicode-canonical-property-names-ecmascript": "^2.0.0", "unicode-property-aliases-ecmascript": "^2.0.0" } }, "unicode-match-property-value-ecmascript": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz", "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==", "dev": true }, "unicode-property-aliases-ecmascript": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz", "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==", "dev": true }, "universalify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", "dev": true }, "uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, "requires": { "punycode": "^2.1.0" } }, "url": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", "dev": true, "requires": { "punycode": "1.3.2", "querystring": "0.2.0" }, "dependencies": { "punycode": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", "dev": true } } }, "util": { "version": "0.12.4", "resolved": "https://registry.npmjs.org/util/-/util-0.12.4.tgz", "integrity": "sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw==", "dev": true, "requires": { "inherits": "^2.0.3", "is-arguments": "^1.0.4", "is-generator-function": "^1.0.7", "is-typed-array": "^1.1.3", "safe-buffer": "^5.1.2", "which-typed-array": "^1.1.2" } }, "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.4.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", "dev": true }, "validate-npm-package-license": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, "requires": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" } }, "vm-browserify": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", "dev": true }, "webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", "dev": true }, "whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", "dev": true, "requires": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" } }, "which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, "requires": { "isexe": "^2.0.0" } }, "which-boxed-primitive": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", "dev": true, "requires": { "is-bigint": "^1.0.1", "is-boolean-object": "^1.1.0", "is-number-object": "^1.0.4", "is-string": "^1.0.5", "is-symbol": "^1.0.3" } }, "which-module": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", "dev": true }, "which-typed-array": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.7.tgz", "integrity": "sha512-vjxaB4nfDqwKI0ws7wZpxIlde1XrLX5uB0ZjpfshgmapJMD7jJWhZI+yToJTqaFByF0eNBcYxbjmCzoRP7CfEw==", "dev": true, "requires": { "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", "es-abstract": "^1.18.5", "foreach": "^2.0.5", "has-tostringtag": "^1.0.0", "is-typed-array": "^1.1.7" } }, "wide-align": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", "dev": true, "requires": { "string-width": "^1.0.2 || 2" } }, "word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", "dev": true }, "workerpool": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.0.tgz", "integrity": "sha512-toV7q9rWNYha963Pl/qyeZ6wG+3nnsyvolaNUS8+R5Wtw6qJPTxIlOP1ZSvcGhEJw+l3HMMmtiNo9Gl61G4GVg==", "dev": true }, "wrap-ansi": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", "dev": true, "requires": { "ansi-styles": "^3.2.0", "string-width": "^3.0.0", "strip-ansi": "^5.0.0" }, "dependencies": { "ansi-regex": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", "dev": true }, "string-width": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", "dev": true, "requires": { "emoji-regex": "^7.0.1", "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^5.1.0" } }, "strip-ansi": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dev": true, "requires": { "ansi-regex": "^4.1.0" } } } }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true }, "write": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", "dev": true, "requires": { "mkdirp": "^0.5.1" } }, "write-file-atomic": { "version": "2.4.3", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", "dev": true, "requires": { "graceful-fs": "^4.1.11", "imurmurhash": "^0.1.4", "signal-exit": "^3.0.2" } }, "xmlchars": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", "dev": true }, "xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", "dev": true }, "y18n": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", "dev": true }, "yallist": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", "dev": true }, "yargs": { "version": "13.3.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", "dev": true, "requires": { "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" }, "dependencies": { "ansi-regex": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", "dev": true }, "string-width": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", "dev": true, "requires": { "emoji-regex": "^7.0.1", "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^5.1.0" } }, "strip-ansi": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dev": true, "requires": { "ansi-regex": "^4.1.0" } } } }, "yargs-parser": { "version": "13.1.2", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", "dev": true, "requires": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" } }, "yargs-unparser": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", "dev": true, "requires": { "camelcase": "^6.0.0", "decamelize": "^4.0.0", "flat": "^5.0.2", "is-plain-obj": "^2.1.0" }, "dependencies": { "camelcase": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true }, "decamelize": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", "dev": true } } }, "yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true } } } N3.js-1.16.3/package.json000066400000000000000000000067061433366257500150120ustar00rootroot00000000000000{ "name": "n3", "version": "1.16.3", "description": "Lightning fast, asynchronous, streaming Turtle / N3 / RDF library.", "author": "Ruben Verborgh ", "keywords": [ "turtle", "rdf", "n3", "streaming", "asynchronous" ], "license": "MIT", "main": "./lib/index.js", "module": "./src/index.js", "sideEffects": false, "engines": { "node": ">=12.0" }, "files": [ ".babelrc", "src", "lib", "browser" ], "dependencies": { "queue-microtask": "^1.1.2", "readable-stream": "^4.0.0" }, "devDependencies": { "@babel/cli": "^7.16.0", "@babel/core": "^7.16.0", "@babel/preset-env": "^7.16.0", "@babel/register": "^7.16.0", "arrayify-stream": "^1.0.0", "browserify": "^17.0.0", "chai": "^4.0.2", "chai-things": "^0.2.0", "colors": "^1.1.2", "docco": "^0.8.0", "eslint": "^5.14.1", "mocha": "^8.0.0", "nyc": "^14.1.1", "pre-commit": "^1.2.2", "rdf-test-suite": "^1.19.2", "streamify-string": "^1.0.1", "uglify-js": "^3.14.3" }, "scripts": { "build": "npm run build:node && npm run build:browser", "build:node": "babel src -d lib", "build:browser": "rm -rf browser && mkdir browser && browserify -s N3 lib/index.js | uglifyjs > browser/n3.min.js", "test": "nyc npm run mocha", "mocha": "mocha", "lint": "eslint src perf test spec", "prepare": "npm run build", "spec": "npm run spec-turtle && npm run spec-ntriples && npm run spec-nquads && npm run spec-trig", "spec-earl": "npm run spec-earl-turtle && npm run spec-earl-ntriples && npm run spec-earl-nquads && npm run spec-earl-trig", "spec-ntriples": "rdf-test-suite spec/parser.js http://w3c.github.io/rdf-tests/ntriples/manifest.ttl -i '{ \"format\": \"n-triples\" }' -c .rdf-test-suite-cache/", "spec-nquads": "rdf-test-suite spec/parser.js http://w3c.github.io/rdf-tests/nquads/manifest.ttl -i '{ \"format\": \"n-quads\" }' -c .rdf-test-suite-cache/", "spec-turtle": "rdf-test-suite spec/parser.js http://w3c.github.io/rdf-tests/turtle/manifest.ttl -i '{ \"format\": \"turtle\" }' -c .rdf-test-suite-cache/", "spec-trig": "rdf-test-suite spec/parser.js http://w3c.github.io/rdf-tests/trig/manifest.ttl -i '{ \"format\": \"trig\" }' -c .rdf-test-suite-cache/", "spec-earl-ntriples": "rdf-test-suite spec/parser.js http://w3c.github.io/rdf-tests/ntriples/manifest.ttl -i '{ \"format\": \"n-triples\" }' -c .rdf-test-suite-cache/ -o earl -p spec/earl-meta.json > spec/earl-ntriples.ttl", "spec-earl-nquads": "rdf-test-suite spec/parser.js http://w3c.github.io/rdf-tests/nquads/manifest.ttl -i '{ \"format\": \"n-quads\" }' -c .rdf-test-suite-cache/ -o earl -p spec/earl-meta.json > spec/earl-nquads.ttl", "spec-earl-turtle": "rdf-test-suite spec/parser.js http://w3c.github.io/rdf-tests/turtle/manifest.ttl -i '{ \"format\": \"turtle\" }' -c .rdf-test-suite-cache/ -o earl -p spec/earl-meta.json > spec/earl-turtle.ttl", "spec-earl-trig": "rdf-test-suite spec/parser.js http://w3c.github.io/rdf-tests/trig/manifest.ttl -i '{ \"format\": \"trig\" }' -c .rdf-test-suite-cache/ -o earl -p spec/earl-meta.json > spec/earl-trig.ttl", "spec-clean": "rm -r .rdf-test-suite-cache/", "docs": "cd src && docco *.js -o ../docs && cd .." }, "repository": { "type": "git", "url": "https://github.com/rdfjs/N3.js.git" }, "bugs": { "url": "https://github.com/rdfjs/N3.js/issues" }, "pre-commit": [ "lint", "test" ] } N3.js-1.16.3/perf/000077500000000000000000000000001433366257500134475ustar00rootroot00000000000000N3.js-1.16.3/perf/.eslintrc000066400000000000000000000001021433366257500152640ustar00rootroot00000000000000{ rules: { no-console: off, no-process-exit: off, } } N3.js-1.16.3/perf/N3Lexer-perf.js000077500000000000000000000011771433366257500162300ustar00rootroot00000000000000#!/usr/bin/env node const N3 = require('..'); const fs = require('fs'), assert = require('assert'); if (process.argv.length !== 3) { console.error('Usage: N3Lexer-perf.js filename'); process.exit(1); } const filename = process.argv[2]; const TEST = `- Lexing file ${filename}`; console.time(TEST); let count = 0; new N3.Lexer().tokenize(fs.createReadStream(filename), (error, token) => { assert(!error, error); count++; if (token.type === 'eof') { console.timeEnd(TEST); console.log(`* Tokens lexed: ${count}`); console.log(`* Memory usage: ${Math.round(process.memoryUsage().rss / 1024 / 1024)}MB`); } }); N3.js-1.16.3/perf/N3Parser-perf.js000077500000000000000000000013421433366257500163770ustar00rootroot00000000000000#!/usr/bin/env node const N3 = require('..'); const fs = require('fs'), path = require('path'), assert = require('assert'); if (process.argv.length !== 3) { console.error('Usage: N3Parser-perf.js filename'); process.exit(1); } const filename = path.resolve(process.cwd(), process.argv[2]), base = `file://${filename}`; const TEST = `- Parsing file ${filename}`; console.time(TEST); let count = 0; new N3.Parser({ baseIRI: base }).parse(fs.createReadStream(filename), (error, quad) => { assert(!error, error); if (quad) count++; else { console.timeEnd(TEST); console.log(`* Quads parsed: ${count}`); console.log(`* Memory usage: ${Math.round(process.memoryUsage().rss / 1024 / 1024)}MB`); } }); N3.js-1.16.3/perf/N3Store-perf.js000077500000000000000000000117521433366257500162450ustar00rootroot00000000000000#!/usr/bin/env node const N3 = require('..'); const assert = require('assert'); console.log('N3Store performance test'); const prefix = 'http://example.org/#'; /* Test triples */ let dim = Number.parseInt(process.argv[2], 10) || 256; let dimSquared = dim * dim; let dimCubed = dimSquared * dim; let store = new N3.Store(); let TEST = `- Adding ${dimCubed} triples to the default graph`; console.time(TEST); let i, j, k, l; for (i = 0; i < dim; i++) for (j = 0; j < dim; j++) for (k = 0; k < dim; k++) store.addQuad(prefix + i, prefix + j, prefix + k); console.timeEnd(TEST); console.log(`* Memory usage for triples: ${Math.round(process.memoryUsage().rss / 1024 / 1024)}MB`); TEST = `- Finding all ${dimCubed} triples in the default graph ${dimSquared * 1} times (0 variables)`; console.time(TEST); for (i = 0; i < dim; i++) for (j = 0; j < dim; j++) for (k = 0; k < dim; k++) assert.equal(store.getQuads(prefix + i, prefix + j, prefix + k, '').length, 1); console.timeEnd(TEST); TEST = `- Finding all ${dimCubed} triples in the default graph ${dimSquared * 2} times (1 variable)`; console.time(TEST); for (i = 0; i < dim; i++) for (j = 0; j < dim; j++) assert.equal(store.getQuads(prefix + i, prefix + j, null, '').length, dim); for (i = 0; i < dim; i++) for (j = 0; j < dim; j++) assert.equal(store.getQuads(prefix + i, null, prefix + j, '').length, dim); for (i = 0; i < dim; i++) for (j = 0; j < dim; j++) assert.equal(store.getQuads(null, prefix + i, prefix + j, '').length, dim); console.timeEnd(TEST); TEST = `- Finding all ${dimCubed} triples in the default graph ${dimSquared * 3} times (2 variables)`; console.time(TEST); for (i = 0; i < dim; i++) assert.equal(store.getQuads(prefix + i, null, null, '').length, dimSquared); for (j = 0; j < dim; j++) assert.equal(store.getQuads(null, prefix + j, null, '').length, dimSquared); for (k = 0; k < dim; k++) assert.equal(store.getQuads(null, null, prefix + k, '').length, dimSquared); console.timeEnd(TEST); console.log(); /* Test quads */ dim /= 4; dimSquared = dim * dim; dimCubed = dimSquared * dim; const dimQuads = dimCubed * dim; store = new N3.Store(); TEST = `- Adding ${dimQuads} quads`; console.time(TEST); for (i = 0; i < dim; i++) for (j = 0; j < dim; j++) for (k = 0; k < dim; k++) for (l = 0; l < dim; l++) store.addQuad(prefix + i, prefix + j, prefix + k, prefix + l); console.timeEnd(TEST); console.log(`* Memory usage for quads: ${Math.round(process.memoryUsage().rss / 1024 / 1024)}MB`); TEST = `- Finding all ${dimQuads} quads ${dimCubed * 4} times`; console.time(TEST); for (i = 0; i < dim; i++) assert.equal(store.getQuads(prefix + i, null, null, null).length, dimCubed); for (j = 0; j < dim; j++) assert.equal(store.getQuads(null, prefix + j, null, null).length, dimCubed); for (k = 0; k < dim; k++) assert.equal(store.getQuads(null, null, prefix + k, null).length, dimCubed); for (l = 0; l < dim; l++) assert.equal(store.getQuads(null, null, null, prefix + l).length, dimCubed); console.timeEnd(TEST); console.log('N3 Store tests for sparsely connected entities'); store = new N3.Store(); TEST = `- Adding ${dimQuads} with all different IRIs`; console.time(TEST); for (let i = 0; i < dimQuads; i++) { store.addQuad( prefix + i, prefix + i, prefix + i ); } console.timeEnd(TEST); TEST = `* Retrieving all ${dimQuads} quads`; console.time(TEST); for (const quad of store.match(undefined, undefined, undefined)) { assert(quad); } console.timeEnd(TEST); TEST = '* Retrieving single by subject'; console.time(TEST); for (let i = 0; i < 1000000; i++) { for (const quad of store.match(prefix + 1, undefined, undefined)) { assert(quad); } } console.timeEnd(TEST); TEST = '* Retrieving single by predicate'; console.time(TEST); for (let i = 0; i < 1000000; i++) { for (const quad of store.match(undefined, prefix + 1, undefined)) { assert(quad); } } console.timeEnd(TEST); TEST = '* Retrieving single by object'; console.time(TEST); for (let i = 0; i < 1000000; i++) { for (const quad of store.match(undefined, undefined, prefix + 1)) { assert(quad); } } console.timeEnd(TEST); TEST = '* Retrieving single by subject-predicate'; console.time(TEST); for (let i = 0; i < 1000000; i++) { for (const quad of store.match(prefix + 1, prefix + 1, undefined)) { assert(quad); } } console.timeEnd(TEST); TEST = '* Retrieving single by subject-object'; console.time(TEST); for (let i = 0; i < 1000000; i++) { for (const quad of store.match(prefix + 1, undefined, prefix + 1)) { assert(quad); } } console.timeEnd(TEST); TEST = '* Retrieving single by predicate-object'; console.time(TEST); for (let i = 0; i < 1000000; i++) { for (const quad of store.match(undefined, prefix + 1, prefix + 1)) { assert(quad); } } console.timeEnd(TEST); TEST = '* Retrieving single by subject-predicate-object'; console.time(TEST); for (let i = 0; i < 1000000; i++) { for (const quad of store.match(prefix + 1, prefix + 1, prefix + 1)) { assert(quad); } } console.timeEnd(TEST); N3.js-1.16.3/spec/000077500000000000000000000000001433366257500134455ustar00rootroot00000000000000N3.js-1.16.3/spec/.eslintrc000066400000000000000000000002221433366257500152650ustar00rootroot00000000000000{ rules: { max-nested-callbacks: 0, no-console: 0, no-loop-func: 0, no-process-exit: 0, no-shadow: 0, no-sync: 0, } } N3.js-1.16.3/spec/earl-meta.json000066400000000000000000000014611433366257500162110ustar00rootroot00000000000000{ "applicationBugsUrl": "https://github.com/rdfjs/N3.js/issues", "applicationDescription": "Lightning fast, asynchronous, streaming Turtle / N3 / RDF library.", "applicationNameFull": "n3", "applicationNameNpm": "n3", "applicationHomepageUrl": "https://github.com/rdfjs/N3.js", "applicationBlogUrl": "https://ruben.verborgh.org/blog/", "applicationUri": "https://www.npmjs.com/package/n3/", "authors": [ { "homepage": null, "name": "Ruben Verborgh ", "uri": "https://ruben.verborgh.org/" } ], "licenseUri": "http://opensource.org/licenses/MIT", "reportUri": null, "specificationUris": [ "https://www.w3.org/TR/turtle/", "https://www.w3.org/TR/trig/", "https://www.w3.org/TR/n-triples/", "https://www.w3.org/TR/n-quads/" ] }N3.js-1.16.3/spec/parser.js000066400000000000000000000006411433366257500153000ustar00rootroot00000000000000const { StreamParser } = require('..'); // Implements the IParser interface from rdf-test-suite // https://github.com/rubensworks/rdf-test-suite.js/blob/master/lib/testcase/rdfsyntax/IParser.ts module.exports = { parse: function (data, baseIRI, options) { return require('arrayify-stream')(require('streamify-string')(data).pipe( new StreamParser(Object.assign({ baseIRI: baseIRI }, options)))); }, }; N3.js-1.16.3/src/000077500000000000000000000000001433366257500133025ustar00rootroot00000000000000N3.js-1.16.3/src/IRIs.js000066400000000000000000000013031433366257500144430ustar00rootroot00000000000000const RDF = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#', XSD = 'http://www.w3.org/2001/XMLSchema#', SWAP = 'http://www.w3.org/2000/10/swap/'; export default { xsd: { decimal: `${XSD}decimal`, boolean: `${XSD}boolean`, double: `${XSD}double`, integer: `${XSD}integer`, string: `${XSD}string`, }, rdf: { type: `${RDF}type`, nil: `${RDF}nil`, first: `${RDF}first`, rest: `${RDF}rest`, langString: `${RDF}langString`, }, owl: { sameAs: 'http://www.w3.org/2002/07/owl#sameAs', }, r: { forSome: `${SWAP}reify#forSome`, forAll: `${SWAP}reify#forAll`, }, log: { implies: `${SWAP}log#implies`, }, }; N3.js-1.16.3/src/N3DataFactory.js000066400000000000000000000245171433366257500162530ustar00rootroot00000000000000// N3.js implementations of the RDF/JS core data types // See https://github.com/rdfjs/representation-task-force/blob/master/interface-spec.md import namespaces from './IRIs'; import { isDefaultGraph } from './N3Util'; const { rdf, xsd } = namespaces; // eslint-disable-next-line prefer-const let DEFAULTGRAPH; let _blankNodeCounter = 0; const escapedLiteral = /^"(.*".*)(?="[^"]*$)/; const quadId = /^<<("(?:""|[^"])*"[^ ]*|[^ ]+) ("(?:""|[^"])*"[^ ]*|[^ ]+) ("(?:""|[^"])*"[^ ]*|[^ ]+) ?("(?:""|[^"])*"[^ ]*|[^ ]+)?>>$/; // ## DataFactory singleton const DataFactory = { namedNode, blankNode, variable, literal, defaultGraph, quad, triple: quad, }; export default DataFactory; // ## Term constructor export class Term { constructor(id) { this.id = id; } // ### The value of this term get value() { return this.id; } // ### Returns whether this object represents the same term as the other equals(other) { // If both terms were created by this library, // equality can be computed through ids if (other instanceof Term) return this.id === other.id; // Otherwise, compare term type and value return !!other && this.termType === other.termType && this.value === other.value; } // ### Implement hashCode for Immutable.js, since we implement `equals` // https://immutable-js.com/docs/v4.0.0/ValueObject/#hashCode() hashCode() { return 0; } // ### Returns a plain object representation of this term toJSON() { return { termType: this.termType, value: this.value, }; } } // ## NamedNode constructor export class NamedNode extends Term { // ### The term type of this term get termType() { return 'NamedNode'; } } // ## Literal constructor export class Literal extends Term { // ### The term type of this term get termType() { return 'Literal'; } // ### The text value of this literal get value() { return this.id.substring(1, this.id.lastIndexOf('"')); } // ### The language of this literal get language() { // Find the last quotation mark (e.g., '"abc"@en-us') const id = this.id; let atPos = id.lastIndexOf('"') + 1; // If "@" it follows, return the remaining substring; empty otherwise return atPos < id.length && id[atPos++] === '@' ? id.substr(atPos).toLowerCase() : ''; } // ### The datatype IRI of this literal get datatype() { return new NamedNode(this.datatypeString); } // ### The datatype string of this literal get datatypeString() { // Find the last quotation mark (e.g., '"abc"^^http://ex.org/types#t') const id = this.id, dtPos = id.lastIndexOf('"') + 1; const char = dtPos < id.length ? id[dtPos] : ''; // If "^" it follows, return the remaining substring return char === '^' ? id.substr(dtPos + 2) : // If "@" follows, return rdf:langString; xsd:string otherwise (char !== '@' ? xsd.string : rdf.langString); } // ### Returns whether this object represents the same term as the other equals(other) { // If both literals were created by this library, // equality can be computed through ids if (other instanceof Literal) return this.id === other.id; // Otherwise, compare term type, value, language, and datatype return !!other && !!other.datatype && this.termType === other.termType && this.value === other.value && this.language === other.language && this.datatype.value === other.datatype.value; } toJSON() { return { termType: this.termType, value: this.value, language: this.language, datatype: { termType: 'NamedNode', value: this.datatypeString }, }; } } // ## BlankNode constructor export class BlankNode extends Term { constructor(name) { super(`_:${name}`); } // ### The term type of this term get termType() { return 'BlankNode'; } // ### The name of this blank node get value() { return this.id.substr(2); } } export class Variable extends Term { constructor(name) { super(`?${name}`); } // ### The term type of this term get termType() { return 'Variable'; } // ### The name of this variable get value() { return this.id.substr(1); } } // ## DefaultGraph constructor export class DefaultGraph extends Term { constructor() { super(''); return DEFAULTGRAPH || this; } // ### The term type of this term get termType() { return 'DefaultGraph'; } // ### Returns whether this object represents the same term as the other equals(other) { // If both terms were created by this library, // equality can be computed through strict equality; // otherwise, compare term types. return (this === other) || (!!other && (this.termType === other.termType)); } } // ## DefaultGraph singleton DEFAULTGRAPH = new DefaultGraph(); // ### Constructs a term from the given internal string ID export function termFromId(id, factory) { factory = factory || DataFactory; // Falsy value or empty string indicate the default graph if (!id) return factory.defaultGraph(); // Identify the term type based on the first character switch (id[0]) { case '?': return factory.variable(id.substr(1)); case '_': return factory.blankNode(id.substr(2)); case '"': // Shortcut for internal literals if (factory === DataFactory) return new Literal(id); // Literal without datatype or language if (id[id.length - 1] === '"') return factory.literal(id.substr(1, id.length - 2)); // Literal with datatype or language const endPos = id.lastIndexOf('"', id.length - 1); return factory.literal(id.substr(1, endPos - 1), id[endPos + 1] === '@' ? id.substr(endPos + 2) : factory.namedNode(id.substr(endPos + 3))); case '<': const components = quadId.exec(id); return factory.quad( termFromId(unescapeQuotes(components[1]), factory), termFromId(unescapeQuotes(components[2]), factory), termFromId(unescapeQuotes(components[3]), factory), components[4] && termFromId(unescapeQuotes(components[4]), factory) ); default: return factory.namedNode(id); } } // ### Constructs an internal string ID from the given term or ID string export function termToId(term) { if (typeof term === 'string') return term; if (term instanceof Term && term.termType !== 'Quad') return term.id; if (!term) return DEFAULTGRAPH.id; // Term instantiated with another library switch (term.termType) { case 'NamedNode': return term.value; case 'BlankNode': return `_:${term.value}`; case 'Variable': return `?${term.value}`; case 'DefaultGraph': return ''; case 'Literal': return `"${term.value}"${ term.language ? `@${term.language}` : (term.datatype && term.datatype.value !== xsd.string ? `^^${term.datatype.value}` : '')}`; case 'Quad': // To identify RDF* quad components, we escape quotes by doubling them. // This avoids the overhead of backslash parsing of Turtle-like syntaxes. return `<<${ escapeQuotes(termToId(term.subject)) } ${ escapeQuotes(termToId(term.predicate)) } ${ escapeQuotes(termToId(term.object)) }${ (isDefaultGraph(term.graph)) ? '' : ` ${termToId(term.graph)}` }>>`; default: throw new Error(`Unexpected termType: ${term.termType}`); } } // ## Quad constructor export class Quad extends Term { constructor(subject, predicate, object, graph) { super(''); this._subject = subject; this._predicate = predicate; this._object = object; this._graph = graph || DEFAULTGRAPH; } // ### The term type of this term get termType() { return 'Quad'; } get subject() { return this._subject; } get predicate() { return this._predicate; } get object() { return this._object; } get graph() { return this._graph; } // ### Returns a plain object representation of this quad toJSON() { return { termType: this.termType, subject: this._subject.toJSON(), predicate: this._predicate.toJSON(), object: this._object.toJSON(), graph: this._graph.toJSON(), }; } // ### Returns whether this object represents the same quad as the other equals(other) { return !!other && this._subject.equals(other.subject) && this._predicate.equals(other.predicate) && this._object.equals(other.object) && this._graph.equals(other.graph); } } export { Quad as Triple }; // ### Escapes the quotes within the given literal export function escapeQuotes(id) { return id.replace(escapedLiteral, (_, quoted) => `"${quoted.replace(/"/g, '""')}`); } // ### Unescapes the quotes within the given literal export function unescapeQuotes(id) { return id.replace(escapedLiteral, (_, quoted) => `"${quoted.replace(/""/g, '"')}`); } // ### Creates an IRI function namedNode(iri) { return new NamedNode(iri); } // ### Creates a blank node function blankNode(name) { return new BlankNode(name || `n3-${_blankNodeCounter++}`); } // ### Creates a literal function literal(value, languageOrDataType) { // Create a language-tagged string if (typeof languageOrDataType === 'string') return new Literal(`"${value}"@${languageOrDataType.toLowerCase()}`); // Automatically determine datatype for booleans and numbers let datatype = languageOrDataType ? languageOrDataType.value : ''; if (datatype === '') { // Convert a boolean if (typeof value === 'boolean') datatype = xsd.boolean; // Convert an integer or double else if (typeof value === 'number') { if (Number.isFinite(value)) datatype = Number.isInteger(value) ? xsd.integer : xsd.double; else { datatype = xsd.double; if (!Number.isNaN(value)) value = value > 0 ? 'INF' : '-INF'; } } } // Create a datatyped literal return (datatype === '' || datatype === xsd.string) ? new Literal(`"${value}"`) : new Literal(`"${value}"^^${datatype}`); } // ### Creates a variable function variable(name) { return new Variable(name); } // ### Returns the default graph function defaultGraph() { return DEFAULTGRAPH; } // ### Creates a quad function quad(subject, predicate, object, graph) { return new Quad(subject, predicate, object, graph); } N3.js-1.16.3/src/N3Lexer.js000066400000000000000000000501301433366257500151170ustar00rootroot00000000000000// **N3Lexer** tokenizes N3 documents. import namespaces from './IRIs'; import queueMicrotask from 'queue-microtask'; const { xsd } = namespaces; // Regular expression and replacement string to escape N3 strings const escapeSequence = /\\u([a-fA-F0-9]{4})|\\U([a-fA-F0-9]{8})|\\([^])/g; const escapeReplacements = { '\\': '\\', "'": "'", '"': '"', 'n': '\n', 'r': '\r', 't': '\t', 'f': '\f', 'b': '\b', '_': '_', '~': '~', '.': '.', '-': '-', '!': '!', '$': '$', '&': '&', '(': '(', ')': ')', '*': '*', '+': '+', ',': ',', ';': ';', '=': '=', '/': '/', '?': '?', '#': '#', '@': '@', '%': '%', }; const illegalIriChars = /[\x00-\x20<>\\"\{\}\|\^\`]/; const lineModeRegExps = { _iri: true, _unescapedIri: true, _simpleQuotedString: true, _langcode: true, _blank: true, _newline: true, _comment: true, _whitespace: true, _endOfFile: true, }; const invalidRegExp = /$0^/; // ## Constructor export default class N3Lexer { constructor(options) { // ## Regular expressions // It's slightly faster to have these as properties than as in-scope variables this._iri = /^<((?:[^ <>{}\\]|\\[uU])+)>[ \t]*/; // IRI with escape sequences; needs sanity check after unescaping this._unescapedIri = /^<([^\x00-\x20<>\\"\{\}\|\^\`]*)>[ \t]*/; // IRI without escape sequences; no unescaping this._simpleQuotedString = /^"([^"\\\r\n]*)"(?=[^"])/; // string without escape sequences this._simpleApostropheString = /^'([^'\\\r\n]*)'(?=[^'])/; this._langcode = /^@([a-z]+(?:-[a-z0-9]+)*)(?=[^a-z0-9\-])/i; this._prefix = /^((?:[A-Za-z\xc0-\xd6\xd8-\xf6\xf8-\u02ff\u0370-\u037d\u037f-\u1fff\u200c\u200d\u2070-\u218f\u2c00-\u2fef\u3001-\ud7ff\uf900-\ufdcf\ufdf0-\ufffd]|[\ud800-\udb7f][\udc00-\udfff])(?:\.?[\-0-9A-Z_a-z\xb7\xc0-\xd6\xd8-\xf6\xf8-\u037d\u037f-\u1fff\u200c\u200d\u203f\u2040\u2070-\u218f\u2c00-\u2fef\u3001-\ud7ff\uf900-\ufdcf\ufdf0-\ufffd]|[\ud800-\udb7f][\udc00-\udfff])*)?:(?=[#\s<])/; this._prefixed = /^((?:[A-Za-z\xc0-\xd6\xd8-\xf6\xf8-\u02ff\u0370-\u037d\u037f-\u1fff\u200c\u200d\u2070-\u218f\u2c00-\u2fef\u3001-\ud7ff\uf900-\ufdcf\ufdf0-\ufffd]|[\ud800-\udb7f][\udc00-\udfff])(?:\.?[\-0-9A-Z_a-z\xb7\xc0-\xd6\xd8-\xf6\xf8-\u037d\u037f-\u1fff\u200c\u200d\u203f\u2040\u2070-\u218f\u2c00-\u2fef\u3001-\ud7ff\uf900-\ufdcf\ufdf0-\ufffd]|[\ud800-\udb7f][\udc00-\udfff])*)?:((?:(?:[0-:A-Z_a-z\xc0-\xd6\xd8-\xf6\xf8-\u02ff\u0370-\u037d\u037f-\u1fff\u200c\u200d\u2070-\u218f\u2c00-\u2fef\u3001-\ud7ff\uf900-\ufdcf\ufdf0-\ufffd]|[\ud800-\udb7f][\udc00-\udfff]|%[0-9a-fA-F]{2}|\\[!#-\/;=?\-@_~])(?:(?:[\.\-0-:A-Z_a-z\xb7\xc0-\xd6\xd8-\xf6\xf8-\u037d\u037f-\u1fff\u200c\u200d\u203f\u2040\u2070-\u218f\u2c00-\u2fef\u3001-\ud7ff\uf900-\ufdcf\ufdf0-\ufffd]|[\ud800-\udb7f][\udc00-\udfff]|%[0-9a-fA-F]{2}|\\[!#-\/;=?\-@_~])*(?:[\-0-:A-Z_a-z\xb7\xc0-\xd6\xd8-\xf6\xf8-\u037d\u037f-\u1fff\u200c\u200d\u203f\u2040\u2070-\u218f\u2c00-\u2fef\u3001-\ud7ff\uf900-\ufdcf\ufdf0-\ufffd]|[\ud800-\udb7f][\udc00-\udfff]|%[0-9a-fA-F]{2}|\\[!#-\/;=?\-@_~]))?)?)(?:[ \t]+|(?=\.?[,;!\^\s#()\[\]\{\}"'<>]))/; this._variable = /^\?(?:(?:[A-Z_a-z\xc0-\xd6\xd8-\xf6\xf8-\u02ff\u0370-\u037d\u037f-\u1fff\u200c\u200d\u2070-\u218f\u2c00-\u2fef\u3001-\ud7ff\uf900-\ufdcf\ufdf0-\ufffd]|[\ud800-\udb7f][\udc00-\udfff])(?:[\-0-:A-Z_a-z\xb7\xc0-\xd6\xd8-\xf6\xf8-\u037d\u037f-\u1fff\u200c\u200d\u203f\u2040\u2070-\u218f\u2c00-\u2fef\u3001-\ud7ff\uf900-\ufdcf\ufdf0-\ufffd]|[\ud800-\udb7f][\udc00-\udfff])*)(?=[.,;!\^\s#()\[\]\{\}"'<>])/; this._blank = /^_:((?:[0-9A-Z_a-z\xc0-\xd6\xd8-\xf6\xf8-\u02ff\u0370-\u037d\u037f-\u1fff\u200c\u200d\u2070-\u218f\u2c00-\u2fef\u3001-\ud7ff\uf900-\ufdcf\ufdf0-\ufffd]|[\ud800-\udb7f][\udc00-\udfff])(?:\.?[\-0-9A-Z_a-z\xb7\xc0-\xd6\xd8-\xf6\xf8-\u037d\u037f-\u1fff\u200c\u200d\u203f\u2040\u2070-\u218f\u2c00-\u2fef\u3001-\ud7ff\uf900-\ufdcf\ufdf0-\ufffd]|[\ud800-\udb7f][\udc00-\udfff])*)(?:[ \t]+|(?=\.?[,;:\s#()\[\]\{\}"'<>]))/; this._number = /^[\-+]?(?:(\d+\.\d*|\.?\d+)[eE][\-+]?|\d*(\.)?)\d+(?=\.?[,;:\s#()\[\]\{\}"'<>])/; this._boolean = /^(?:true|false)(?=[.,;\s#()\[\]\{\}"'<>])/; this._keyword = /^@[a-z]+(?=[\s#<:])/i; this._sparqlKeyword = /^(?:PREFIX|BASE|GRAPH)(?=[\s#<])/i; this._shortPredicates = /^a(?=[\s#()\[\]\{\}"'<>])/; this._newline = /^[ \t]*(?:#[^\n\r]*)?(?:\r\n|\n|\r)[ \t]*/; this._comment = /#([^\n\r]*)/; this._whitespace = /^[ \t]+/; this._endOfFile = /^(?:#[^\n\r]*)?$/; options = options || {}; // In line mode (N-Triples or N-Quads), only simple features may be parsed if (this._lineMode = !!options.lineMode) { this._n3Mode = false; // Don't tokenize special literals for (const key in this) { if (!(key in lineModeRegExps) && this[key] instanceof RegExp) this[key] = invalidRegExp; } } // When not in line mode, enable N3 functionality by default else { this._n3Mode = options.n3 !== false; } // Don't output comment tokens by default this._comments = !!options.comments; // Cache the last tested closing position of long literals this._literalClosingPos = 0; } // ## Private methods // ### `_tokenizeToEnd` tokenizes as for as possible, emitting tokens through the callback _tokenizeToEnd(callback, inputFinished) { // Continue parsing as far as possible; the loop will return eventually let input = this._input; let currentLineLength = input.length; while (true) { // Count and skip whitespace lines let whiteSpaceMatch, comment; while (whiteSpaceMatch = this._newline.exec(input)) { // Try to find a comment if (this._comments && (comment = this._comment.exec(whiteSpaceMatch[0]))) emitToken('comment', comment[1], '', this._line, whiteSpaceMatch[0].length); // Advance the input input = input.substr(whiteSpaceMatch[0].length, input.length); currentLineLength = input.length; this._line++; } // Skip whitespace on current line if (!whiteSpaceMatch && (whiteSpaceMatch = this._whitespace.exec(input))) input = input.substr(whiteSpaceMatch[0].length, input.length); // Stop for now if we're at the end if (this._endOfFile.test(input)) { // If the input is finished, emit EOF if (inputFinished) { // Try to find a final comment if (this._comments && (comment = this._comment.exec(input))) emitToken('comment', comment[1], '', this._line, input.length); input = null; emitToken('eof', '', '', this._line, 0); } return this._input = input; } // Look for specific token types based on the first character const line = this._line, firstChar = input[0]; let type = '', value = '', prefix = '', match = null, matchLength = 0, inconclusive = false; switch (firstChar) { case '^': // We need at least 3 tokens lookahead to distinguish ^^ and ^^pre:fixed if (input.length < 3) break; // Try to match a type else if (input[1] === '^') { this._previousMarker = '^^'; // Move to type IRI or prefixed name input = input.substr(2); if (input[0] !== '<') { inconclusive = true; break; } } // If no type, it must be a path expression else { if (this._n3Mode) { matchLength = 1; type = '^'; } break; } // Fall through in case the type is an IRI case '<': // Try to find a full IRI without escape sequences if (match = this._unescapedIri.exec(input)) type = 'IRI', value = match[1]; // Try to find a full IRI with escape sequences else if (match = this._iri.exec(input)) { value = this._unescape(match[1]); if (value === null || illegalIriChars.test(value)) return reportSyntaxError(this); type = 'IRI'; } // Try to find a nested triple else if (input.length > 1 && input[1] === '<') type = '<<', matchLength = 2; // Try to find a backwards implication arrow else if (this._n3Mode && input.length > 1 && input[1] === '=') type = 'inverse', matchLength = 2, value = '>'; break; case '>': if (input.length > 1 && input[1] === '>') type = '>>', matchLength = 2; break; case '_': // Try to find a blank node. Since it can contain (but not end with) a dot, // we always need a non-dot character before deciding it is a blank node. // Therefore, try inserting a space if we're at the end of the input. if ((match = this._blank.exec(input)) || inputFinished && (match = this._blank.exec(`${input} `))) type = 'blank', prefix = '_', value = match[1]; break; case '"': // Try to find a literal without escape sequences if (match = this._simpleQuotedString.exec(input)) value = match[1]; // Try to find a literal wrapped in three pairs of quotes else { ({ value, matchLength } = this._parseLiteral(input)); if (value === null) return reportSyntaxError(this); } if (match !== null || matchLength !== 0) { type = 'literal'; this._literalClosingPos = 0; } break; case "'": if (!this._lineMode) { // Try to find a literal without escape sequences if (match = this._simpleApostropheString.exec(input)) value = match[1]; // Try to find a literal wrapped in three pairs of quotes else { ({ value, matchLength } = this._parseLiteral(input)); if (value === null) return reportSyntaxError(this); } if (match !== null || matchLength !== 0) { type = 'literal'; this._literalClosingPos = 0; } } break; case '?': // Try to find a variable if (this._n3Mode && (match = this._variable.exec(input))) type = 'var', value = match[0]; break; case '@': // Try to find a language code if (this._previousMarker === 'literal' && (match = this._langcode.exec(input))) type = 'langcode', value = match[1]; // Try to find a keyword else if (match = this._keyword.exec(input)) type = match[0]; break; case '.': // Try to find a dot as punctuation if (input.length === 1 ? inputFinished : (input[1] < '0' || input[1] > '9')) { type = '.'; matchLength = 1; break; } // Fall through to numerical case (could be a decimal dot) case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case '+': case '-': // Try to find a number. Since it can contain (but not end with) a dot, // we always need a non-dot character before deciding it is a number. // Therefore, try inserting a space if we're at the end of the input. if (match = this._number.exec(input) || inputFinished && (match = this._number.exec(`${input} `))) { type = 'literal', value = match[0]; prefix = (typeof match[1] === 'string' ? xsd.double : (typeof match[2] === 'string' ? xsd.decimal : xsd.integer)); } break; case 'B': case 'b': case 'p': case 'P': case 'G': case 'g': // Try to find a SPARQL-style keyword if (match = this._sparqlKeyword.exec(input)) type = match[0].toUpperCase(); else inconclusive = true; break; case 'f': case 't': // Try to match a boolean if (match = this._boolean.exec(input)) type = 'literal', value = match[0], prefix = xsd.boolean; else inconclusive = true; break; case 'a': // Try to find an abbreviated predicate if (match = this._shortPredicates.exec(input)) type = 'abbreviation', value = 'a'; else inconclusive = true; break; case '=': // Try to find an implication arrow or equals sign if (this._n3Mode && input.length > 1) { type = 'abbreviation'; if (input[1] !== '>') matchLength = 1, value = '='; else matchLength = 2, value = '>'; } break; case '!': if (!this._n3Mode) break; case ',': case ';': case '[': case ']': case '(': case ')': case '{': case '}': if (!this._lineMode) { matchLength = 1; type = firstChar; } break; default: inconclusive = true; } // Some first characters do not allow an immediate decision, so inspect more if (inconclusive) { // Try to find a prefix if ((this._previousMarker === '@prefix' || this._previousMarker === 'PREFIX') && (match = this._prefix.exec(input))) type = 'prefix', value = match[1] || ''; // Try to find a prefixed name. Since it can contain (but not end with) a dot, // we always need a non-dot character before deciding it is a prefixed name. // Therefore, try inserting a space if we're at the end of the input. else if ((match = this._prefixed.exec(input)) || inputFinished && (match = this._prefixed.exec(`${input} `))) type = 'prefixed', prefix = match[1] || '', value = this._unescape(match[2]); } // A type token is special: it can only be emitted after an IRI or prefixed name is read if (this._previousMarker === '^^') { switch (type) { case 'prefixed': type = 'type'; break; case 'IRI': type = 'typeIRI'; break; default: type = ''; } } // What if nothing of the above was found? if (!type) { // We could be in streaming mode, and then we just wait for more input to arrive. // Otherwise, a syntax error has occurred in the input. // One exception: error on an unaccounted linebreak (= not inside a triple-quoted literal). if (inputFinished || (!/^'''|^"""/.test(input) && /\n|\r/.test(input))) return reportSyntaxError(this); else return this._input = input; } // Emit the parsed token const length = matchLength || match[0].length; const token = emitToken(type, value, prefix, line, length); this.previousToken = token; this._previousMarker = type; // Advance to next part to tokenize input = input.substr(length, input.length); } // Emits the token through the callback function emitToken(type, value, prefix, line, length) { const start = input ? currentLineLength - input.length : currentLineLength; const end = start + length; const token = { type, value, prefix, line, start, end }; callback(null, token); return token; } // Signals the syntax error through the callback function reportSyntaxError(self) { callback(self._syntaxError(/^\S*/.exec(input)[0])); } } // ### `_unescape` replaces N3 escape codes by their corresponding characters _unescape(item) { let invalid = false; const replaced = item.replace(escapeSequence, (sequence, unicode4, unicode8, escapedChar) => { // 4-digit unicode character if (typeof unicode4 === 'string') return String.fromCharCode(Number.parseInt(unicode4, 16)); // 8-digit unicode character if (typeof unicode8 === 'string') { let charCode = Number.parseInt(unicode8, 16); return charCode <= 0xFFFF ? String.fromCharCode(Number.parseInt(unicode8, 16)) : String.fromCharCode(0xD800 + ((charCode -= 0x10000) >> 10), 0xDC00 + (charCode & 0x3FF)); } // fixed escape sequence if (escapedChar in escapeReplacements) return escapeReplacements[escapedChar]; // invalid escape sequence invalid = true; return ''; }); return invalid ? null : replaced; } // ### `_parseLiteral` parses a literal into an unescaped value _parseLiteral(input) { // Ensure we have enough lookahead to identify triple-quoted strings if (input.length >= 3) { // Identify the opening quote(s) const opening = input.match(/^(?:"""|"|'''|'|)/)[0]; const openingLength = opening.length; // Find the next candidate closing quotes let closingPos = Math.max(this._literalClosingPos, openingLength); while ((closingPos = input.indexOf(opening, closingPos)) > 0) { // Count backslashes right before the closing quotes let backslashCount = 0; while (input[closingPos - backslashCount - 1] === '\\') backslashCount++; // An even number of backslashes (in particular 0) // means these are actual, non-escaped closing quotes if (backslashCount % 2 === 0) { // Extract and unescape the value const raw = input.substring(openingLength, closingPos); const lines = raw.split(/\r\n|\r|\n/).length - 1; const matchLength = closingPos + openingLength; // Only triple-quoted strings can be multi-line if (openingLength === 1 && lines !== 0 || openingLength === 3 && this._lineMode) break; this._line += lines; return { value: this._unescape(raw), matchLength }; } closingPos++; } this._literalClosingPos = input.length - openingLength + 1; } return { value: '', matchLength: 0 }; } // ### `_syntaxError` creates a syntax error for the given issue _syntaxError(issue) { this._input = null; const err = new Error(`Unexpected "${issue}" on line ${this._line}.`); err.context = { token: undefined, line: this._line, previousToken: this.previousToken, }; return err; } // ### Strips off any starting UTF BOM mark. _readStartingBom(input) { return input.startsWith('\ufeff') ? input.substr(1) : input; } // ## Public methods // ### `tokenize` starts the transformation of an N3 document into an array of tokens. // The input can be a string or a stream. tokenize(input, callback) { this._line = 1; // If the input is a string, continuously emit tokens through the callback until the end if (typeof input === 'string') { this._input = this._readStartingBom(input); // If a callback was passed, asynchronously call it if (typeof callback === 'function') queueMicrotask(() => this._tokenizeToEnd(callback, true)); // If no callback was passed, tokenize synchronously and return else { const tokens = []; let error; this._tokenizeToEnd((e, t) => e ? (error = e) : tokens.push(t), true); if (error) throw error; return tokens; } } // Otherwise, the input must be a stream else { this._pendingBuffer = null; if (typeof input.setEncoding === 'function') input.setEncoding('utf8'); // Adds the data chunk to the buffer and parses as far as possible input.on('data', data => { if (this._input !== null && data.length !== 0) { // Prepend any previous pending writes if (this._pendingBuffer) { data = Buffer.concat([this._pendingBuffer, data]); this._pendingBuffer = null; } // Hold if the buffer ends in an incomplete unicode sequence if (data[data.length - 1] & 0x80) { this._pendingBuffer = data; } // Otherwise, tokenize as far as possible else { // Only read a BOM at the start if (typeof this._input === 'undefined') this._input = this._readStartingBom(typeof data === 'string' ? data : data.toString()); else this._input += data; this._tokenizeToEnd(callback, false); } } }); // Parses until the end input.on('end', () => { if (typeof this._input === 'string') this._tokenizeToEnd(callback, true); }); input.on('error', callback); } } } N3.js-1.16.3/src/N3Parser.js000066400000000000000000001127721433366257500153070ustar00rootroot00000000000000// **N3Parser** parses N3 documents. import N3Lexer from './N3Lexer'; import N3DataFactory from './N3DataFactory'; import namespaces from './IRIs'; let blankNodePrefix = 0; // ## Constructor export default class N3Parser { constructor(options) { this._contextStack = []; this._graph = null; // Set the document IRI options = options || {}; this._setBase(options.baseIRI); options.factory && initDataFactory(this, options.factory); // Set supported features depending on the format const format = (typeof options.format === 'string') ? options.format.match(/\w*$/)[0].toLowerCase() : '', isTurtle = /turtle/.test(format), isTriG = /trig/.test(format), isNTriples = /triple/.test(format), isNQuads = /quad/.test(format), isN3 = this._n3Mode = /n3/.test(format), isLineMode = isNTriples || isNQuads; if (!(this._supportsNamedGraphs = !(isTurtle || isN3))) this._readPredicateOrNamedGraph = this._readPredicate; // Support triples in other graphs this._supportsQuads = !(isTurtle || isTriG || isNTriples || isN3); // Support nesting of triples this._supportsRDFStar = format === '' || /star|\*$/.test(format); // Disable relative IRIs in N-Triples or N-Quads mode if (isLineMode) this._resolveRelativeIRI = iri => { return null; }; this._blankNodePrefix = typeof options.blankNodePrefix !== 'string' ? '' : options.blankNodePrefix.replace(/^(?!_:)/, '_:'); this._lexer = options.lexer || new N3Lexer({ lineMode: isLineMode, n3: isN3 }); // Disable explicit quantifiers by default this._explicitQuantifiers = !!options.explicitQuantifiers; } // ## Static class methods // ### `_resetBlankNodePrefix` restarts blank node prefix identification static _resetBlankNodePrefix() { blankNodePrefix = 0; } // ## Private methods // ### `_setBase` sets the base IRI to resolve relative IRIs _setBase(baseIRI) { if (!baseIRI) { this._base = ''; this._basePath = ''; } else { // Remove fragment if present const fragmentPos = baseIRI.indexOf('#'); if (fragmentPos >= 0) baseIRI = baseIRI.substr(0, fragmentPos); // Set base IRI and its components this._base = baseIRI; this._basePath = baseIRI.indexOf('/') < 0 ? baseIRI : baseIRI.replace(/[^\/?]*(?:\?.*)?$/, ''); baseIRI = baseIRI.match(/^(?:([a-z][a-z0-9+.-]*:))?(?:\/\/[^\/]*)?/i); this._baseRoot = baseIRI[0]; this._baseScheme = baseIRI[1]; } } // ### `_saveContext` stores the current parsing context // when entering a new scope (list, blank node, formula) _saveContext(type, graph, subject, predicate, object) { const n3Mode = this._n3Mode; this._contextStack.push({ type, subject, predicate, object, graph, inverse: n3Mode ? this._inversePredicate : false, blankPrefix: n3Mode ? this._prefixes._ : '', quantified: n3Mode ? this._quantified : null, }); // The settings below only apply to N3 streams if (n3Mode) { // Every new scope resets the predicate direction this._inversePredicate = false; // In N3, blank nodes are scoped to a formula // (using a dot as separator, as a blank node label cannot start with it) this._prefixes._ = (this._graph ? `${this._graph.id.substr(2)}.` : '.'); // Quantifiers are scoped to a formula this._quantified = Object.create(this._quantified); } } // ### `_restoreContext` restores the parent context // when leaving a scope (list, blank node, formula) _restoreContext(type, token) { // Obtain the previous context const context = this._contextStack.pop(); if (!context || context.type !== type) return this._error(`Unexpected ${token.type}`, token); // Restore the quad of the previous context this._subject = context.subject; this._predicate = context.predicate; this._object = context.object; this._graph = context.graph; // Restore N3 context settings if (this._n3Mode) { this._inversePredicate = context.inverse; this._prefixes._ = context.blankPrefix; this._quantified = context.quantified; } } // ### `_readInTopContext` reads a token when in the top context _readInTopContext(token) { switch (token.type) { // If an EOF token arrives in the top context, signal that we're done case 'eof': if (this._graph !== null) return this._error('Unclosed graph', token); delete this._prefixes._; return this._callback(null, null, this._prefixes); // It could be a prefix declaration case 'PREFIX': this._sparqlStyle = true; case '@prefix': return this._readPrefix; // It could be a base declaration case 'BASE': this._sparqlStyle = true; case '@base': return this._readBaseIRI; // It could be a graph case '{': if (this._supportsNamedGraphs) { this._graph = ''; this._subject = null; return this._readSubject; } case 'GRAPH': if (this._supportsNamedGraphs) return this._readNamedGraphLabel; // Otherwise, the next token must be a subject default: return this._readSubject(token); } } // ### `_readEntity` reads an IRI, prefixed name, blank node, or variable _readEntity(token, quantifier) { let value; switch (token.type) { // Read a relative or absolute IRI case 'IRI': case 'typeIRI': const iri = this._resolveIRI(token.value); if (iri === null) return this._error('Invalid IRI', token); value = this._namedNode(iri); break; // Read a prefixed name case 'type': case 'prefixed': const prefix = this._prefixes[token.prefix]; if (prefix === undefined) return this._error(`Undefined prefix "${token.prefix}:"`, token); value = this._namedNode(prefix + token.value); break; // Read a blank node case 'blank': value = this._blankNode(this._prefixes[token.prefix] + token.value); break; // Read a variable case 'var': value = this._variable(token.value.substr(1)); break; // Everything else is not an entity default: return this._error(`Expected entity but got ${token.type}`, token); } // In N3 mode, replace the entity if it is quantified if (!quantifier && this._n3Mode && (value.id in this._quantified)) value = this._quantified[value.id]; return value; } // ### `_readSubject` reads a quad's subject _readSubject(token) { this._predicate = null; switch (token.type) { case '[': // Start a new quad with a new blank node as subject this._saveContext('blank', this._graph, this._subject = this._blankNode(), null, null); return this._readBlankNodeHead; case '(': // Start a new list this._saveContext('list', this._graph, this.RDF_NIL, null, null); this._subject = null; return this._readListItem; case '{': // Start a new formula if (!this._n3Mode) return this._error('Unexpected graph', token); this._saveContext('formula', this._graph, this._graph = this._blankNode(), null, null); return this._readSubject; case '}': // No subject; the graph in which we are reading is closed instead return this._readPunctuation(token); case '@forSome': if (!this._n3Mode) return this._error('Unexpected "@forSome"', token); this._subject = null; this._predicate = this.N3_FORSOME; this._quantifier = this._blankNode; return this._readQuantifierList; case '@forAll': if (!this._n3Mode) return this._error('Unexpected "@forAll"', token); this._subject = null; this._predicate = this.N3_FORALL; this._quantifier = this._variable; return this._readQuantifierList; case 'literal': if (!this._n3Mode) return this._error('Unexpected literal', token); if (token.prefix.length === 0) { this._literalValue = token.value; return this._completeSubjectLiteral; } else this._subject = this._literal(token.value, this._namedNode(token.prefix)); break; case '<<': if (!this._supportsRDFStar) return this._error('Unexpected RDF* syntax', token); this._saveContext('<<', this._graph, null, null, null); this._graph = null; return this._readSubject; default: // Read the subject entity if ((this._subject = this._readEntity(token)) === undefined) return; // In N3 mode, the subject might be a path if (this._n3Mode) return this._getPathReader(this._readPredicateOrNamedGraph); } // The next token must be a predicate, // or, if the subject was actually a graph IRI, a named graph return this._readPredicateOrNamedGraph; } // ### `_readPredicate` reads a quad's predicate _readPredicate(token) { const type = token.type; switch (type) { case 'inverse': this._inversePredicate = true; case 'abbreviation': this._predicate = this.ABBREVIATIONS[token.value]; break; case '.': case ']': case '}': // Expected predicate didn't come, must have been trailing semicolon if (this._predicate === null) return this._error(`Unexpected ${type}`, token); this._subject = null; return type === ']' ? this._readBlankNodeTail(token) : this._readPunctuation(token); case ';': // Additional semicolons can be safely ignored return this._predicate !== null ? this._readPredicate : this._error('Expected predicate but got ;', token); case '[': if (this._n3Mode) { // Start a new quad with a new blank node as subject this._saveContext('blank', this._graph, this._subject, this._subject = this._blankNode(), null); return this._readBlankNodeHead; } case 'blank': if (!this._n3Mode) return this._error('Disallowed blank node as predicate', token); default: if ((this._predicate = this._readEntity(token)) === undefined) return; } // The next token must be an object return this._readObject; } // ### `_readObject` reads a quad's object _readObject(token) { switch (token.type) { case 'literal': // Regular literal, can still get a datatype or language if (token.prefix.length === 0) { this._literalValue = token.value; return this._readDataTypeOrLang; } // Pre-datatyped string literal (prefix stores the datatype) else this._object = this._literal(token.value, this._namedNode(token.prefix)); break; case '[': // Start a new quad with a new blank node as subject this._saveContext('blank', this._graph, this._subject, this._predicate, this._subject = this._blankNode()); return this._readBlankNodeHead; case '(': // Start a new list this._saveContext('list', this._graph, this._subject, this._predicate, this.RDF_NIL); this._subject = null; return this._readListItem; case '{': // Start a new formula if (!this._n3Mode) return this._error('Unexpected graph', token); this._saveContext('formula', this._graph, this._subject, this._predicate, this._graph = this._blankNode()); return this._readSubject; case '<<': if (!this._supportsRDFStar) return this._error('Unexpected RDF* syntax', token); this._saveContext('<<', this._graph, this._subject, this._predicate, null); this._graph = null; return this._readSubject; default: // Read the object entity if ((this._object = this._readEntity(token)) === undefined) return; // In N3 mode, the object might be a path if (this._n3Mode) return this._getPathReader(this._getContextEndReader()); } return this._getContextEndReader(); } // ### `_readPredicateOrNamedGraph` reads a quad's predicate, or a named graph _readPredicateOrNamedGraph(token) { return token.type === '{' ? this._readGraph(token) : this._readPredicate(token); } // ### `_readGraph` reads a graph _readGraph(token) { if (token.type !== '{') return this._error(`Expected graph but got ${token.type}`, token); // The "subject" we read is actually the GRAPH's label this._graph = this._subject, this._subject = null; return this._readSubject; } // ### `_readBlankNodeHead` reads the head of a blank node _readBlankNodeHead(token) { if (token.type === ']') { this._subject = null; return this._readBlankNodeTail(token); } else { this._predicate = null; return this._readPredicate(token); } } // ### `_readBlankNodeTail` reads the end of a blank node _readBlankNodeTail(token) { if (token.type !== ']') return this._readBlankNodePunctuation(token); // Store blank node quad if (this._subject !== null) this._emit(this._subject, this._predicate, this._object, this._graph); // Restore the parent context containing this blank node const empty = this._predicate === null; this._restoreContext('blank', token); // If the blank node was the object, restore previous context and read punctuation if (this._object !== null) return this._getContextEndReader(); // If the blank node was the predicate, continue reading the object else if (this._predicate !== null) return this._readObject; // If the blank node was the subject, continue reading the predicate else // If the blank node was empty, it could be a named graph label return empty ? this._readPredicateOrNamedGraph : this._readPredicateAfterBlank; } // ### `_readPredicateAfterBlank` reads a predicate after an anonymous blank node _readPredicateAfterBlank(token) { switch (token.type) { case '.': case '}': // No predicate is coming if the triple is terminated here this._subject = null; return this._readPunctuation(token); default: return this._readPredicate(token); } } // ### `_readListItem` reads items from a list _readListItem(token) { let item = null, // The item of the list list = null, // The list itself next = this._readListItem; // The next function to execute const previousList = this._subject, // The previous list that contains this list stack = this._contextStack, // The stack of parent contexts parent = stack[stack.length - 1]; // The parent containing the current list switch (token.type) { case '[': // Stack the current list quad and start a new quad with a blank node as subject this._saveContext('blank', this._graph, list = this._blankNode(), this.RDF_FIRST, this._subject = item = this._blankNode()); next = this._readBlankNodeHead; break; case '(': // Stack the current list quad and start a new list this._saveContext('list', this._graph, list = this._blankNode(), this.RDF_FIRST, this.RDF_NIL); this._subject = null; break; case ')': // Closing the list; restore the parent context this._restoreContext('list', token); // If this list is contained within a parent list, return the membership quad here. // This will be ` rdf:first .`. if (stack.length !== 0 && stack[stack.length - 1].type === 'list') this._emit(this._subject, this._predicate, this._object, this._graph); // Was this list the parent's subject? if (this._predicate === null) { // The next token is the predicate next = this._readPredicate; // No list tail if this was an empty list if (this._subject === this.RDF_NIL) return next; } // The list was in the parent context's object else { next = this._getContextEndReader(); // No list tail if this was an empty list if (this._object === this.RDF_NIL) return next; } // Close the list by making the head nil list = this.RDF_NIL; break; case 'literal': // Regular literal, can still get a datatype or language if (token.prefix.length === 0) { this._literalValue = token.value; next = this._readListItemDataTypeOrLang; } // Pre-datatyped string literal (prefix stores the datatype) else { item = this._literal(token.value, this._namedNode(token.prefix)); next = this._getContextEndReader(); } break; case '{': // Start a new formula if (!this._n3Mode) return this._error('Unexpected graph', token); this._saveContext('formula', this._graph, this._subject, this._predicate, this._graph = this._blankNode()); return this._readSubject; default: if ((item = this._readEntity(token)) === undefined) return; } // Create a new blank node if no item head was assigned yet if (list === null) this._subject = list = this._blankNode(); // Is this the first element of the list? if (previousList === null) { // This list is either the subject or the object of its parent if (parent.predicate === null) parent.subject = list; else parent.object = list; } else { // Continue the previous list with the current list this._emit(previousList, this.RDF_REST, list, this._graph); } // If an item was read, add it to the list if (item !== null) { // In N3 mode, the item might be a path if (this._n3Mode && (token.type === 'IRI' || token.type === 'prefixed')) { // Create a new context to add the item's path this._saveContext('item', this._graph, list, this.RDF_FIRST, item); this._subject = item, this._predicate = null; // _readPath will restore the context and output the item return this._getPathReader(this._readListItem); } // Output the item this._emit(list, this.RDF_FIRST, item, this._graph); } return next; } // ### `_readDataTypeOrLang` reads an _optional_ datatype or language _readDataTypeOrLang(token) { return this._completeObjectLiteral(token, false); } // ### `_readListItemDataTypeOrLang` reads an _optional_ datatype or language in a list _readListItemDataTypeOrLang(token) { return this._completeObjectLiteral(token, true); } // ### `_completeLiteral` completes a literal with an optional datatype or language _completeLiteral(token) { // Create a simple string literal by default let literal = this._literal(this._literalValue); switch (token.type) { // Create a datatyped literal case 'type': case 'typeIRI': const datatype = this._readEntity(token); if (datatype === undefined) return; // No datatype means an error occurred literal = this._literal(this._literalValue, datatype); token = null; break; // Create a language-tagged string case 'langcode': literal = this._literal(this._literalValue, token.value); token = null; break; } return { token, literal }; } // Completes a literal in subject position _completeSubjectLiteral(token) { this._subject = this._completeLiteral(token).literal; return this._readPredicateOrNamedGraph; } // Completes a literal in object position _completeObjectLiteral(token, listItem) { const completed = this._completeLiteral(token); if (!completed) return; this._object = completed.literal; // If this literal was part of a list, write the item // (we could also check the context stack, but passing in a flag is faster) if (listItem) this._emit(this._subject, this.RDF_FIRST, this._object, this._graph); // If the token was consumed, continue with the rest of the input if (completed.token === null) return this._getContextEndReader(); // Otherwise, consume the token now else { this._readCallback = this._getContextEndReader(); return this._readCallback(completed.token); } } // ### `_readFormulaTail` reads the end of a formula _readFormulaTail(token) { if (token.type !== '}') return this._readPunctuation(token); // Store the last quad of the formula if (this._subject !== null) this._emit(this._subject, this._predicate, this._object, this._graph); // Restore the parent context containing this formula this._restoreContext('formula', token); // If the formula was the subject, continue reading the predicate. // If the formula was the object, read punctuation. return this._object === null ? this._readPredicate : this._getContextEndReader(); } // ### `_readPunctuation` reads punctuation between quads or quad parts _readPunctuation(token) { let next, graph = this._graph; const subject = this._subject, inversePredicate = this._inversePredicate; switch (token.type) { // A closing brace ends a graph case '}': if (this._graph === null) return this._error('Unexpected graph closing', token); if (this._n3Mode) return this._readFormulaTail(token); this._graph = null; // A dot just ends the statement, without sharing anything with the next case '.': this._subject = null; next = this._contextStack.length ? this._readSubject : this._readInTopContext; if (inversePredicate) this._inversePredicate = false; break; // Semicolon means the subject is shared; predicate and object are different case ';': next = this._readPredicate; break; // Comma means both the subject and predicate are shared; the object is different case ',': next = this._readObject; break; default: // An entity means this is a quad (only allowed if not already inside a graph) if (this._supportsQuads && this._graph === null && (graph = this._readEntity(token)) !== undefined) { next = this._readQuadPunctuation; break; } return this._error(`Expected punctuation to follow "${this._object.id}"`, token); } // A quad has been completed now, so return it if (subject !== null) { const predicate = this._predicate, object = this._object; if (!inversePredicate) this._emit(subject, predicate, object, graph); else this._emit(object, predicate, subject, graph); } return next; } // ### `_readBlankNodePunctuation` reads punctuation in a blank node _readBlankNodePunctuation(token) { let next; switch (token.type) { // Semicolon means the subject is shared; predicate and object are different case ';': next = this._readPredicate; break; // Comma means both the subject and predicate are shared; the object is different case ',': next = this._readObject; break; default: return this._error(`Expected punctuation to follow "${this._object.id}"`, token); } // A quad has been completed now, so return it this._emit(this._subject, this._predicate, this._object, this._graph); return next; } // ### `_readQuadPunctuation` reads punctuation after a quad _readQuadPunctuation(token) { if (token.type !== '.') return this._error('Expected dot to follow quad', token); return this._readInTopContext; } // ### `_readPrefix` reads the prefix of a prefix declaration _readPrefix(token) { if (token.type !== 'prefix') return this._error('Expected prefix to follow @prefix', token); this._prefix = token.value; return this._readPrefixIRI; } // ### `_readPrefixIRI` reads the IRI of a prefix declaration _readPrefixIRI(token) { if (token.type !== 'IRI') return this._error(`Expected IRI to follow prefix "${this._prefix}:"`, token); const prefixNode = this._readEntity(token); this._prefixes[this._prefix] = prefixNode.value; this._prefixCallback(this._prefix, prefixNode); return this._readDeclarationPunctuation; } // ### `_readBaseIRI` reads the IRI of a base declaration _readBaseIRI(token) { const iri = token.type === 'IRI' && this._resolveIRI(token.value); if (!iri) return this._error('Expected valid IRI to follow base declaration', token); this._setBase(iri); return this._readDeclarationPunctuation; } // ### `_readNamedGraphLabel` reads the label of a named graph _readNamedGraphLabel(token) { switch (token.type) { case 'IRI': case 'blank': case 'prefixed': return this._readSubject(token), this._readGraph; case '[': return this._readNamedGraphBlankLabel; default: return this._error('Invalid graph label', token); } } // ### `_readNamedGraphLabel` reads a blank node label of a named graph _readNamedGraphBlankLabel(token) { if (token.type !== ']') return this._error('Invalid graph label', token); this._subject = this._blankNode(); return this._readGraph; } // ### `_readDeclarationPunctuation` reads the punctuation of a declaration _readDeclarationPunctuation(token) { // SPARQL-style declarations don't have punctuation if (this._sparqlStyle) { this._sparqlStyle = false; return this._readInTopContext(token); } if (token.type !== '.') return this._error('Expected declaration to end with a dot', token); return this._readInTopContext; } // Reads a list of quantified symbols from a @forSome or @forAll statement _readQuantifierList(token) { let entity; switch (token.type) { case 'IRI': case 'prefixed': if ((entity = this._readEntity(token, true)) !== undefined) break; default: return this._error(`Unexpected ${token.type}`, token); } // Without explicit quantifiers, map entities to a quantified entity if (!this._explicitQuantifiers) this._quantified[entity.id] = this._quantifier(this._blankNode().value); // With explicit quantifiers, output the reified quantifier else { // If this is the first item, start a new quantifier list if (this._subject === null) this._emit(this._graph || this.DEFAULTGRAPH, this._predicate, this._subject = this._blankNode(), this.QUANTIFIERS_GRAPH); // Otherwise, continue the previous list else this._emit(this._subject, this.RDF_REST, this._subject = this._blankNode(), this.QUANTIFIERS_GRAPH); // Output the list item this._emit(this._subject, this.RDF_FIRST, entity, this.QUANTIFIERS_GRAPH); } return this._readQuantifierPunctuation; } // Reads punctuation from a @forSome or @forAll statement _readQuantifierPunctuation(token) { // Read more quantifiers if (token.type === ',') return this._readQuantifierList; // End of the quantifier list else { // With explicit quantifiers, close the quantifier list if (this._explicitQuantifiers) { this._emit(this._subject, this.RDF_REST, this.RDF_NIL, this.QUANTIFIERS_GRAPH); this._subject = null; } // Read a dot this._readCallback = this._getContextEndReader(); return this._readCallback(token); } } // ### `_getPathReader` reads a potential path and then resumes with the given function _getPathReader(afterPath) { this._afterPath = afterPath; return this._readPath; } // ### `_readPath` reads a potential path _readPath(token) { switch (token.type) { // Forward path case '!': return this._readForwardPath; // Backward path case '^': return this._readBackwardPath; // Not a path; resume reading where we left off default: const stack = this._contextStack, parent = stack.length && stack[stack.length - 1]; // If we were reading a list item, we still need to output it if (parent && parent.type === 'item') { // The list item is the remaining subejct after reading the path const item = this._subject; // Switch back to the context of the list this._restoreContext('item', token); // Output the list item this._emit(this._subject, this.RDF_FIRST, item, this._graph); } return this._afterPath(token); } } // ### `_readForwardPath` reads a '!' path _readForwardPath(token) { let subject, predicate; const object = this._blankNode(); // The next token is the predicate if ((predicate = this._readEntity(token)) === undefined) return; // If we were reading a subject, replace the subject by the path's object if (this._predicate === null) subject = this._subject, this._subject = object; // If we were reading an object, replace the subject by the path's object else subject = this._object, this._object = object; // Emit the path's current quad and read its next section this._emit(subject, predicate, object, this._graph); return this._readPath; } // ### `_readBackwardPath` reads a '^' path _readBackwardPath(token) { const subject = this._blankNode(); let predicate, object; // The next token is the predicate if ((predicate = this._readEntity(token)) === undefined) return; // If we were reading a subject, replace the subject by the path's subject if (this._predicate === null) object = this._subject, this._subject = subject; // If we were reading an object, replace the subject by the path's subject else object = this._object, this._object = subject; // Emit the path's current quad and read its next section this._emit(subject, predicate, object, this._graph); return this._readPath; } // ### `_readRDFStarTailOrGraph` reads the graph of a nested RDF* quad or the end of a nested RDF* triple _readRDFStarTailOrGraph(token) { if (token.type !== '>>') { // An entity means this is a quad (only allowed if not already inside a graph) if (this._supportsQuads && this._graph === null && (this._graph = this._readEntity(token)) !== undefined) return this._readRDFStarTail; return this._error(`Expected >> to follow "${this._object.id}"`, token); } return this._readRDFStarTail(token); } // ### `_readRDFStarTail` reads the end of a nested RDF* triple _readRDFStarTail(token) { if (token.type !== '>>') return this._error(`Expected >> but got ${token.type}`, token); // Read the quad and restore the previous context const quad = this._quad(this._subject, this._predicate, this._object, this._graph || this.DEFAULTGRAPH); this._restoreContext('<<', token); // If the triple was the subject, continue by reading the predicate. if (this._subject === null) { this._subject = quad; return this._readPredicate; } // If the triple was the object, read context end. else { this._object = quad; return this._getContextEndReader(); } } // ### `_getContextEndReader` gets the next reader function at the end of a context _getContextEndReader() { const contextStack = this._contextStack; if (!contextStack.length) return this._readPunctuation; switch (contextStack[contextStack.length - 1].type) { case 'blank': return this._readBlankNodeTail; case 'list': return this._readListItem; case 'formula': return this._readFormulaTail; case '<<': return this._readRDFStarTailOrGraph; } } // ### `_emit` sends a quad through the callback _emit(subject, predicate, object, graph) { this._callback(null, this._quad(subject, predicate, object, graph || this.DEFAULTGRAPH)); } // ### `_error` emits an error message through the callback _error(message, token) { const err = new Error(`${message} on line ${token.line}.`); err.context = { token: token, line: token.line, previousToken: this._lexer.previousToken, }; this._callback(err); this._callback = noop; } // ### `_resolveIRI` resolves an IRI against the base path _resolveIRI(iri) { return /^[a-z][a-z0-9+.-]*:/i.test(iri) ? iri : this._resolveRelativeIRI(iri); } // ### `_resolveRelativeIRI` resolves an IRI against the base path, // assuming that a base path has been set and that the IRI is indeed relative _resolveRelativeIRI(iri) { // An empty relative IRI indicates the base IRI if (!iri.length) return this._base; // Decide resolving strategy based in the first character switch (iri[0]) { // Resolve relative fragment IRIs against the base IRI case '#': return this._base + iri; // Resolve relative query string IRIs by replacing the query string case '?': return this._base.replace(/(?:\?.*)?$/, iri); // Resolve root-relative IRIs at the root of the base IRI case '/': // Resolve scheme-relative IRIs to the scheme return (iri[1] === '/' ? this._baseScheme : this._baseRoot) + this._removeDotSegments(iri); // Resolve all other IRIs at the base IRI's path default: // Relative IRIs cannot contain a colon in the first path segment return (/^[^/:]*:/.test(iri)) ? null : this._removeDotSegments(this._basePath + iri); } } // ### `_removeDotSegments` resolves './' and '../' path segments in an IRI as per RFC3986 _removeDotSegments(iri) { // Don't modify the IRI if it does not contain any dot segments if (!/(^|\/)\.\.?($|[/#?])/.test(iri)) return iri; // Start with an imaginary slash before the IRI in order to resolve trailing './' and '../' const length = iri.length; let result = '', i = -1, pathStart = -1, segmentStart = 0, next = '/'; while (i < length) { switch (next) { // The path starts with the first slash after the authority case ':': if (pathStart < 0) { // Skip two slashes before the authority if (iri[++i] === '/' && iri[++i] === '/') // Skip to slash after the authority while ((pathStart = i + 1) < length && iri[pathStart] !== '/') i = pathStart; } break; // Don't modify a query string or fragment case '?': case '#': i = length; break; // Handle '/.' or '/..' path segments case '/': if (iri[i + 1] === '.') { next = iri[++i + 1]; switch (next) { // Remove a '/.' segment case '/': result += iri.substring(segmentStart, i - 1); segmentStart = i + 1; break; // Remove a trailing '/.' segment case undefined: case '?': case '#': return result + iri.substring(segmentStart, i) + iri.substr(i + 1); // Remove a '/..' segment case '.': next = iri[++i + 1]; if (next === undefined || next === '/' || next === '?' || next === '#') { result += iri.substring(segmentStart, i - 2); // Try to remove the parent path from result if ((segmentStart = result.lastIndexOf('/')) >= pathStart) result = result.substr(0, segmentStart); // Remove a trailing '/..' segment if (next !== '/') return `${result}/${iri.substr(i + 1)}`; segmentStart = i + 1; } } } } next = iri[++i]; } return result + iri.substring(segmentStart); } // ## Public methods // ### `parse` parses the N3 input and emits each parsed quad through the callback parse(input, quadCallback, prefixCallback) { // The read callback is the next function to be executed when a token arrives. // We start reading in the top context. this._readCallback = this._readInTopContext; this._sparqlStyle = false; this._prefixes = Object.create(null); this._prefixes._ = this._blankNodePrefix ? this._blankNodePrefix.substr(2) : `b${blankNodePrefix++}_`; this._prefixCallback = prefixCallback || noop; this._inversePredicate = false; this._quantified = Object.create(null); // Parse synchronously if no quad callback is given if (!quadCallback) { const quads = []; let error; this._callback = (e, t) => { e ? (error = e) : t && quads.push(t); }; this._lexer.tokenize(input).every(token => { return this._readCallback = this._readCallback(token); }); if (error) throw error; return quads; } // Parse asynchronously otherwise, executing the read callback when a token arrives this._callback = quadCallback; this._lexer.tokenize(input, (error, token) => { if (error !== null) this._callback(error), this._callback = noop; else if (this._readCallback) this._readCallback = this._readCallback(token); }); } } // The empty function function noop() {} // Initializes the parser with the given data factory function initDataFactory(parser, factory) { // Set factory methods const namedNode = factory.namedNode; parser._namedNode = namedNode; parser._blankNode = factory.blankNode; parser._literal = factory.literal; parser._variable = factory.variable; parser._quad = factory.quad; parser.DEFAULTGRAPH = factory.defaultGraph(); // Set common named nodes parser.RDF_FIRST = namedNode(namespaces.rdf.first); parser.RDF_REST = namedNode(namespaces.rdf.rest); parser.RDF_NIL = namedNode(namespaces.rdf.nil); parser.N3_FORALL = namedNode(namespaces.r.forAll); parser.N3_FORSOME = namedNode(namespaces.r.forSome); parser.ABBREVIATIONS = { 'a': namedNode(namespaces.rdf.type), '=': namedNode(namespaces.owl.sameAs), '>': namedNode(namespaces.log.implies), }; parser.QUANTIFIERS_GRAPH = namedNode('urn:n3:quantifiers'); } initDataFactory(N3Parser.prototype, N3DataFactory); N3.js-1.16.3/src/N3Store.js000066400000000000000000000753141433366257500151470ustar00rootroot00000000000000// **N3Store** objects store N3 quads by graph in memory. import { default as N3DataFactory, termToId, termFromId } from './N3DataFactory'; import { Readable } from 'readable-stream'; import namespaces from './IRIs'; // ## Constructor export default class N3Store { constructor(quads, options) { // The number of quads is initially zero this._size = 0; // `_graphs` contains subject, predicate, and object indexes per graph this._graphs = Object.create(null); // `_ids` maps entities such as `http://xmlns.com/foaf/0.1/name` to numbers, // saving memory by using only numbers as keys in `_graphs` this._id = 0; this._ids = Object.create(null); this._ids['><'] = 0; // dummy entry, so the first actual key is non-zero this._entities = Object.create(null); // inverse of `_ids` // `_blankNodeIndex` is the index of the last automatically named blank node this._blankNodeIndex = 0; // Shift parameters if `quads` is not given if (!options && quads && !quads[0]) options = quads, quads = null; options = options || {}; this._factory = options.factory || N3DataFactory; // Add quads if passed if (quads) this.addQuads(quads); } // ## Public properties // ### `size` returns the number of quads in the store get size() { // Return the quad count if if was cached let size = this._size; if (size !== null) return size; // Calculate the number of quads by counting to the deepest level size = 0; const graphs = this._graphs; let subjects, subject; for (const graphKey in graphs) for (const subjectKey in (subjects = graphs[graphKey].subjects)) for (const predicateKey in (subject = subjects[subjectKey])) size += Object.keys(subject[predicateKey]).length; return this._size = size; } // ## Private methods // ### `_addToIndex` adds a quad to a three-layered index. // Returns if the index has changed, if the entry did not already exist. _addToIndex(index0, key0, key1, key2) { // Create layers as necessary const index1 = index0[key0] || (index0[key0] = {}); const index2 = index1[key1] || (index1[key1] = {}); // Setting the key to _any_ value signals the presence of the quad const existed = key2 in index2; if (!existed) index2[key2] = null; return !existed; } // ### `_removeFromIndex` removes a quad from a three-layered index _removeFromIndex(index0, key0, key1, key2) { // Remove the quad from the index const index1 = index0[key0], index2 = index1[key1]; delete index2[key2]; // Remove intermediary index layers if they are empty for (const key in index2) return; delete index1[key1]; for (const key in index1) return; delete index0[key0]; } // ### `_findInIndex` finds a set of quads in a three-layered index. // The index base is `index0` and the keys at each level are `key0`, `key1`, and `key2`. // Any of these keys can be undefined, which is interpreted as a wildcard. // `name0`, `name1`, and `name2` are the names of the keys at each level, // used when reconstructing the resulting quad // (for instance: _subject_, _predicate_, and _object_). // Finally, `graphId` will be the graph of the created quads. *_findInIndex(index0, key0, key1, key2, name0, name1, name2, graphId) { let tmp, index1, index2; const entityKeys = this._entities; const graph = termFromId(graphId, this._factory); const parts = { subject: null, predicate: null, object: null }; // If a key is specified, use only that part of index 0. if (key0) (tmp = index0, index0 = {})[key0] = tmp[key0]; for (const value0 in index0) { if (index1 = index0[value0]) { parts[name0] = termFromId(entityKeys[value0], this._factory); // If a key is specified, use only that part of index 1. if (key1) (tmp = index1, index1 = {})[key1] = tmp[key1]; for (const value1 in index1) { if (index2 = index1[value1]) { parts[name1] = termFromId(entityKeys[value1], this._factory); // If a key is specified, use only that part of index 2, if it exists. const values = key2 ? (key2 in index2 ? [key2] : []) : Object.keys(index2); // Create quads for all items found in index 2. for (let l = 0; l < values.length; l++) { parts[name2] = termFromId(entityKeys[values[l]], this._factory); yield this._factory.quad(parts.subject, parts.predicate, parts.object, graph); } } } } } } // ### `_loop` executes the callback on all keys of index 0 _loop(index0, callback) { for (const key0 in index0) callback(key0); } // ### `_loopByKey0` executes the callback on all keys of a certain entry in index 0 _loopByKey0(index0, key0, callback) { let index1, key1; if (index1 = index0[key0]) { for (key1 in index1) callback(key1); } } // ### `_loopByKey1` executes the callback on given keys of all entries in index 0 _loopByKey1(index0, key1, callback) { let key0, index1; for (key0 in index0) { index1 = index0[key0]; if (index1[key1]) callback(key0); } } // ### `_loopBy2Keys` executes the callback on given keys of certain entries in index 2 _loopBy2Keys(index0, key0, key1, callback) { let index1, index2, key2; if ((index1 = index0[key0]) && (index2 = index1[key1])) { for (key2 in index2) callback(key2); } } // ### `_countInIndex` counts matching quads in a three-layered index. // The index base is `index0` and the keys at each level are `key0`, `key1`, and `key2`. // Any of these keys can be undefined, which is interpreted as a wildcard. _countInIndex(index0, key0, key1, key2) { let count = 0, tmp, index1, index2; // If a key is specified, count only that part of index 0 if (key0) (tmp = index0, index0 = {})[key0] = tmp[key0]; for (const value0 in index0) { if (index1 = index0[value0]) { // If a key is specified, count only that part of index 1 if (key1) (tmp = index1, index1 = {})[key1] = tmp[key1]; for (const value1 in index1) { if (index2 = index1[value1]) { // If a key is specified, count the quad if it exists if (key2) (key2 in index2) && count++; // Otherwise, count all quads else count += Object.keys(index2).length; } } } } return count; } // ### `_getGraphs` returns an array with the given graph, // or all graphs if the argument is null or undefined. _getGraphs(graph) { if (!isString(graph)) return this._graphs; const graphs = {}; graphs[graph] = this._graphs[graph]; return graphs; } // ### `_uniqueEntities` returns a function that accepts an entity ID // and passes the corresponding entity to callback if it hasn't occurred before. _uniqueEntities(callback) { const uniqueIds = Object.create(null); return id => { if (!(id in uniqueIds)) { uniqueIds[id] = true; callback(termFromId(this._entities[id], this._factory)); } }; } // ## Public methods // ### `add` adds the specified quad to the dataset. // Returns the dataset instance it was called on. // Existing quads, as defined in Quad.equals, will be ignored. add(quad) { this.addQuad(quad); return this; } // ### `addQuad` adds a new quad to the store. // Returns if the quad index has changed, if the quad did not already exist. addQuad(subject, predicate, object, graph) { // Shift arguments if a quad object is given instead of components if (!predicate) graph = subject.graph, object = subject.object, predicate = subject.predicate, subject = subject.subject; // Convert terms to internal string representation subject = termToId(subject); predicate = termToId(predicate); object = termToId(object); graph = termToId(graph); // Find the graph that will contain the triple let graphItem = this._graphs[graph]; // Create the graph if it doesn't exist yet if (!graphItem) { graphItem = this._graphs[graph] = { subjects: {}, predicates: {}, objects: {} }; // Freezing a graph helps subsequent `add` performance, // and properties will never be modified anyway Object.freeze(graphItem); } // Since entities can often be long IRIs, we avoid storing them in every index. // Instead, we have a separate index that maps entities to numbers, // which are then used as keys in the other indexes. const ids = this._ids; const entities = this._entities; subject = ids[subject] || (ids[entities[++this._id] = subject] = this._id); predicate = ids[predicate] || (ids[entities[++this._id] = predicate] = this._id); object = ids[object] || (ids[entities[++this._id] = object] = this._id); const changed = this._addToIndex(graphItem.subjects, subject, predicate, object); this._addToIndex(graphItem.predicates, predicate, object, subject); this._addToIndex(graphItem.objects, object, subject, predicate); // The cached quad count is now invalid this._size = null; return changed; } // ### `addQuads` adds multiple quads to the store addQuads(quads) { for (let i = 0; i < quads.length; i++) this.addQuad(quads[i]); } // ### `delete` removes the specified quad from the dataset. // Returns the dataset instance it was called on. delete(quad) { this.removeQuad(quad); return this; } // ### `has` determines whether a dataset includes a certain quad or quad pattern. has(subjectOrQuad, predicate, object, graph) { if (subjectOrQuad && subjectOrQuad.subject) ({ subject: subjectOrQuad, predicate, object, graph } = subjectOrQuad); return !this.readQuads(subjectOrQuad, predicate, object, graph).next().done; } // ### `import` adds a stream of quads to the store import(stream) { stream.on('data', quad => { this.addQuad(quad); }); return stream; } // ### `removeQuad` removes a quad from the store if it exists removeQuad(subject, predicate, object, graph) { // Shift arguments if a quad object is given instead of components if (!predicate) graph = subject.graph, object = subject.object, predicate = subject.predicate, subject = subject.subject; // Convert terms to internal string representation subject = termToId(subject); predicate = termToId(predicate); object = termToId(object); graph = termToId(graph); // Find internal identifiers for all components // and verify the quad exists. const ids = this._ids, graphs = this._graphs; let graphItem, subjects, predicates; if (!(subject = ids[subject]) || !(predicate = ids[predicate]) || !(object = ids[object]) || !(graphItem = graphs[graph]) || !(subjects = graphItem.subjects[subject]) || !(predicates = subjects[predicate]) || !(object in predicates)) return false; // Remove it from all indexes this._removeFromIndex(graphItem.subjects, subject, predicate, object); this._removeFromIndex(graphItem.predicates, predicate, object, subject); this._removeFromIndex(graphItem.objects, object, subject, predicate); if (this._size !== null) this._size--; // Remove the graph if it is empty for (subject in graphItem.subjects) return true; delete graphs[graph]; return true; } // ### `removeQuads` removes multiple quads from the store removeQuads(quads) { for (let i = 0; i < quads.length; i++) this.removeQuad(quads[i]); } // ### `remove` removes a stream of quads from the store remove(stream) { stream.on('data', quad => { this.removeQuad(quad); }); return stream; } // ### `removeMatches` removes all matching quads from the store // Setting any field to `undefined` or `null` indicates a wildcard. removeMatches(subject, predicate, object, graph) { const stream = new Readable({ objectMode: true }); stream._read = () => { for (const quad of this.readQuads(subject, predicate, object, graph)) stream.push(quad); stream.push(null); }; return this.remove(stream); } // ### `deleteGraph` removes all triples with the given graph from the store deleteGraph(graph) { return this.removeMatches(null, null, null, graph); } // ### `getQuads` returns an array of quads matching a pattern. // Setting any field to `undefined` or `null` indicates a wildcard. getQuads(subject, predicate, object, graph) { return [...this.readQuads(subject, predicate, object, graph)]; } // ### `readQuads` returns an generator of quads matching a pattern. // Setting any field to `undefined` or `null` indicates a wildcard. *readQuads(subject, predicate, object, graph) { // Convert terms to internal string representation subject = subject && termToId(subject); predicate = predicate && termToId(predicate); object = object && termToId(object); graph = graph && termToId(graph); const graphs = this._getGraphs(graph), ids = this._ids; let content, subjectId, predicateId, objectId; // Translate IRIs to internal index keys. if (isString(subject) && !(subjectId = ids[subject]) || isString(predicate) && !(predicateId = ids[predicate]) || isString(object) && !(objectId = ids[object])) return; for (const graphId in graphs) { // Only if the specified graph contains triples, there can be results if (content = graphs[graphId]) { // Choose the optimal index, based on what fields are present if (subjectId) { if (objectId) // If subject and object are given, the object index will be the fastest yield* this._findInIndex(content.objects, objectId, subjectId, predicateId, 'object', 'subject', 'predicate', graphId); else // If only subject and possibly predicate are given, the subject index will be the fastest yield* this._findInIndex(content.subjects, subjectId, predicateId, null, 'subject', 'predicate', 'object', graphId); } else if (predicateId) // If only predicate and possibly object are given, the predicate index will be the fastest yield* this._findInIndex(content.predicates, predicateId, objectId, null, 'predicate', 'object', 'subject', graphId); else if (objectId) // If only object is given, the object index will be the fastest yield* this._findInIndex(content.objects, objectId, null, null, 'object', 'subject', 'predicate', graphId); else // If nothing is given, iterate subjects and predicates first yield* this._findInIndex(content.subjects, null, null, null, 'subject', 'predicate', 'object', graphId); } } } // ### `match` returns a new dataset that is comprised of all quads in the current instance matching the given arguments. // The logic described in Quad Matching is applied for each quad in this dataset to check if it should be included in the output dataset. // Note: This method always returns a new DatasetCore, even if that dataset contains no quads. // Note: Since a DatasetCore is an unordered set, the order of the quads within the returned sequence is arbitrary. // Setting any field to `undefined` or `null` indicates a wildcard. // For backwards compatibility, the object return also implements the Readable stream interface. match(subject, predicate, object, graph) { return new DatasetCoreAndReadableStream(this, subject, predicate, object, graph); } // ### `countQuads` returns the number of quads matching a pattern. // Setting any field to `undefined` or `null` indicates a wildcard. countQuads(subject, predicate, object, graph) { // Convert terms to internal string representation subject = subject && termToId(subject); predicate = predicate && termToId(predicate); object = object && termToId(object); graph = graph && termToId(graph); const graphs = this._getGraphs(graph), ids = this._ids; let count = 0, content, subjectId, predicateId, objectId; // Translate IRIs to internal index keys. if (isString(subject) && !(subjectId = ids[subject]) || isString(predicate) && !(predicateId = ids[predicate]) || isString(object) && !(objectId = ids[object])) return 0; for (const graphId in graphs) { // Only if the specified graph contains triples, there can be results if (content = graphs[graphId]) { // Choose the optimal index, based on what fields are present if (subject) { if (object) // If subject and object are given, the object index will be the fastest count += this._countInIndex(content.objects, objectId, subjectId, predicateId); else // If only subject and possibly predicate are given, the subject index will be the fastest count += this._countInIndex(content.subjects, subjectId, predicateId, objectId); } else if (predicate) { // If only predicate and possibly object are given, the predicate index will be the fastest count += this._countInIndex(content.predicates, predicateId, objectId, subjectId); } else { // If only object is possibly given, the object index will be the fastest count += this._countInIndex(content.objects, objectId, subjectId, predicateId); } } } return count; } // ### `forEach` executes the callback on all quads. // Setting any field to `undefined` or `null` indicates a wildcard. forEach(callback, subject, predicate, object, graph) { this.some(quad => { callback(quad); return false; }, subject, predicate, object, graph); } // ### `every` executes the callback on all quads, // and returns `true` if it returns truthy for all them. // Setting any field to `undefined` or `null` indicates a wildcard. every(callback, subject, predicate, object, graph) { let some = false; const every = !this.some(quad => { some = true; return !callback(quad); }, subject, predicate, object, graph); return some && every; } // ### `some` executes the callback on all quads, // and returns `true` if it returns truthy for any of them. // Setting any field to `undefined` or `null` indicates a wildcard. some(callback, subject, predicate, object, graph) { for (const quad of this.readQuads(subject, predicate, object, graph)) if (callback(quad)) return true; return false; } // ### `getSubjects` returns all subjects that match the pattern. // Setting any field to `undefined` or `null` indicates a wildcard. getSubjects(predicate, object, graph) { const results = []; this.forSubjects(s => { results.push(s); }, predicate, object, graph); return results; } // ### `forSubjects` executes the callback on all subjects that match the pattern. // Setting any field to `undefined` or `null` indicates a wildcard. forSubjects(callback, predicate, object, graph) { // Convert terms to internal string representation predicate = predicate && termToId(predicate); object = object && termToId(object); graph = graph && termToId(graph); const ids = this._ids, graphs = this._getGraphs(graph); let content, predicateId, objectId; callback = this._uniqueEntities(callback); // Translate IRIs to internal index keys. if (isString(predicate) && !(predicateId = ids[predicate]) || isString(object) && !(objectId = ids[object])) return; for (graph in graphs) { // Only if the specified graph contains triples, there can be results if (content = graphs[graph]) { // Choose optimal index based on which fields are wildcards if (predicateId) { if (objectId) // If predicate and object are given, the POS index is best. this._loopBy2Keys(content.predicates, predicateId, objectId, callback); else // If only predicate is given, the SPO index is best. this._loopByKey1(content.subjects, predicateId, callback); } else if (objectId) // If only object is given, the OSP index is best. this._loopByKey0(content.objects, objectId, callback); else // If no params given, iterate all the subjects this._loop(content.subjects, callback); } } } // ### `getPredicates` returns all predicates that match the pattern. // Setting any field to `undefined` or `null` indicates a wildcard. getPredicates(subject, object, graph) { const results = []; this.forPredicates(p => { results.push(p); }, subject, object, graph); return results; } // ### `forPredicates` executes the callback on all predicates that match the pattern. // Setting any field to `undefined` or `null` indicates a wildcard. forPredicates(callback, subject, object, graph) { // Convert terms to internal string representation subject = subject && termToId(subject); object = object && termToId(object); graph = graph && termToId(graph); const ids = this._ids, graphs = this._getGraphs(graph); let content, subjectId, objectId; callback = this._uniqueEntities(callback); // Translate IRIs to internal index keys. if (isString(subject) && !(subjectId = ids[subject]) || isString(object) && !(objectId = ids[object])) return; for (graph in graphs) { // Only if the specified graph contains triples, there can be results if (content = graphs[graph]) { // Choose optimal index based on which fields are wildcards if (subjectId) { if (objectId) // If subject and object are given, the OSP index is best. this._loopBy2Keys(content.objects, objectId, subjectId, callback); else // If only subject is given, the SPO index is best. this._loopByKey0(content.subjects, subjectId, callback); } else if (objectId) // If only object is given, the POS index is best. this._loopByKey1(content.predicates, objectId, callback); else // If no params given, iterate all the predicates. this._loop(content.predicates, callback); } } } // ### `getObjects` returns all objects that match the pattern. // Setting any field to `undefined` or `null` indicates a wildcard. getObjects(subject, predicate, graph) { const results = []; this.forObjects(o => { results.push(o); }, subject, predicate, graph); return results; } // ### `forObjects` executes the callback on all objects that match the pattern. // Setting any field to `undefined` or `null` indicates a wildcard. forObjects(callback, subject, predicate, graph) { // Convert terms to internal string representation subject = subject && termToId(subject); predicate = predicate && termToId(predicate); graph = graph && termToId(graph); const ids = this._ids, graphs = this._getGraphs(graph); let content, subjectId, predicateId; callback = this._uniqueEntities(callback); // Translate IRIs to internal index keys. if (isString(subject) && !(subjectId = ids[subject]) || isString(predicate) && !(predicateId = ids[predicate])) return; for (graph in graphs) { // Only if the specified graph contains triples, there can be results if (content = graphs[graph]) { // Choose optimal index based on which fields are wildcards if (subjectId) { if (predicateId) // If subject and predicate are given, the SPO index is best. this._loopBy2Keys(content.subjects, subjectId, predicateId, callback); else // If only subject is given, the OSP index is best. this._loopByKey1(content.objects, subjectId, callback); } else if (predicateId) // If only predicate is given, the POS index is best. this._loopByKey0(content.predicates, predicateId, callback); else // If no params given, iterate all the objects. this._loop(content.objects, callback); } } } // ### `getGraphs` returns all graphs that match the pattern. // Setting any field to `undefined` or `null` indicates a wildcard. getGraphs(subject, predicate, object) { const results = []; this.forGraphs(g => { results.push(g); }, subject, predicate, object); return results; } // ### `forGraphs` executes the callback on all graphs that match the pattern. // Setting any field to `undefined` or `null` indicates a wildcard. forGraphs(callback, subject, predicate, object) { for (const graph in this._graphs) { this.some(quad => { callback(quad.graph); return true; // Halt iteration of some() }, subject, predicate, object, graph); } } // ### `createBlankNode` creates a new blank node, returning its name createBlankNode(suggestedName) { let name, index; // Generate a name based on the suggested name if (suggestedName) { name = suggestedName = `_:${suggestedName}`, index = 1; while (this._ids[name]) name = suggestedName + index++; } // Generate a generic blank node name else { do { name = `_:b${this._blankNodeIndex++}`; } while (this._ids[name]); } // Add the blank node to the entities, avoiding the generation of duplicates this._ids[name] = ++this._id; this._entities[this._id] = name; return this._factory.blankNode(name.substr(2)); } // ### `extractLists` finds and removes all list triples // and returns the items per list. extractLists({ remove = false, ignoreErrors = false } = {}) { const lists = {}; // has scalar keys so could be a simple Object const onError = ignoreErrors ? (() => true) : ((node, message) => { throw new Error(`${node.value} ${message}`); }); // Traverse each list from its tail const tails = this.getQuads(null, namespaces.rdf.rest, namespaces.rdf.nil, null); const toRemove = remove ? [...tails] : []; tails.forEach(tailQuad => { const items = []; // the members found as objects of rdf:first quads let malformed = false; // signals whether the current list is malformed let head; // the head of the list (_:b1 in above example) let headPos; // set to subject or object when head is set const graph = tailQuad.graph; // make sure list is in exactly one graph // Traverse the list from tail to end let current = tailQuad.subject; while (current && !malformed) { const objectQuads = this.getQuads(null, null, current, null); const subjectQuads = this.getQuads(current, null, null, null); let quad, first = null, rest = null, parent = null; // Find the first and rest of this list node for (let i = 0; i < subjectQuads.length && !malformed; i++) { quad = subjectQuads[i]; if (!quad.graph.equals(graph)) malformed = onError(current, 'not confined to single graph'); else if (head) malformed = onError(current, 'has non-list arcs out'); // one rdf:first else if (quad.predicate.value === namespaces.rdf.first) { if (first) malformed = onError(current, 'has multiple rdf:first arcs'); else toRemove.push(first = quad); } // one rdf:rest else if (quad.predicate.value === namespaces.rdf.rest) { if (rest) malformed = onError(current, 'has multiple rdf:rest arcs'); else toRemove.push(rest = quad); } // alien triple else if (objectQuads.length) malformed = onError(current, 'can\'t be subject and object'); else { head = quad; // e.g. { (1 2 3) :p :o } headPos = 'subject'; } } // { :s :p (1 2) } arrives here with no head // { (1 2) :p :o } arrives here with head set to the list. for (let i = 0; i < objectQuads.length && !malformed; ++i) { quad = objectQuads[i]; if (head) malformed = onError(current, 'can\'t have coreferences'); // one rdf:rest else if (quad.predicate.value === namespaces.rdf.rest) { if (parent) malformed = onError(current, 'has incoming rdf:rest arcs'); else parent = quad; } else { head = quad; // e.g. { :s :p (1 2) } headPos = 'object'; } } // Store the list item and continue with parent if (!first) malformed = onError(current, 'has no list head'); else items.unshift(first.object); current = parent && parent.subject; } // Don't remove any quads if the list is malformed if (malformed) remove = false; // Store the list under the value of its head else if (head) lists[head[headPos].value] = items; }); // Remove list quads if requested if (remove) this.removeQuads(toRemove); return lists; } // ### Store is an iterable. // Can be used where iterables are expected: for...of loops, array spread operator, // `yield*`, and destructuring assignment (order is not guaranteed). *[Symbol.iterator]() { yield* this.readQuads(); } } // Determines whether the argument is a string function isString(s) { return typeof s === 'string' || s instanceof String; } /** * A class that implements both DatasetCore and Readable. */ class DatasetCoreAndReadableStream extends Readable { constructor(n3Store, subject, predicate, object, graph) { super({ objectMode: true }); Object.assign(this, { n3Store, subject, predicate, object, graph }); } get filtered() { if (!this._filtered) { const { n3Store, graph, object, predicate, subject } = this; const newStore = this._filtered = new N3Store({ factory: n3Store._factory }); for (const quad of n3Store.readQuads(subject, predicate, object, graph)) newStore.addQuad(quad); } return this._filtered; } get size() { return this.filtered.size; } _read() { for (const quad of this) this.push(quad); this.push(null); } add(quad) { return this.filtered.add(quad); } delete(quad) { return this.filtered.delete(quad); } has(quad) { return this.filtered.has(quad); } match(subject, predicate, object, graph) { return new DatasetCoreAndReadableStream(this.filtered, subject, predicate, object, graph); } *[Symbol.iterator]() { yield* this._filtered || this.n3Store.readQuads(this.subject, this.predicate, this.object, this.graph); } } N3.js-1.16.3/src/N3StreamParser.js000066400000000000000000000025311433366257500164520ustar00rootroot00000000000000// **N3StreamParser** parses a text stream into a quad stream. import N3Parser from './N3Parser'; import { Transform } from 'readable-stream'; // ## Constructor export default class N3StreamParser extends Transform { constructor(options) { super({ decodeStrings: true }); this._readableState.objectMode = true; // Set up parser with dummy stream to obtain `data` and `end` callbacks const parser = new N3Parser(options); let onData, onEnd; parser.parse({ on: (event, callback) => { switch (event) { case 'data': onData = callback; break; case 'end': onEnd = callback; break; } }, }, // Handle quads by pushing them down the pipeline (error, quad) => { error && this.emit('error', error) || quad && this.push(quad); }, // Emit prefixes through the `prefix` event (prefix, uri) => { this.emit('prefix', prefix, uri); } ); // Implement Transform methods through parser callbacks this._transform = (chunk, encoding, done) => { onData(chunk); done(); }; this._flush = done => { onEnd(); done(); }; } // ### Parses a stream of strings import(stream) { stream.on('data', chunk => { this.write(chunk); }); stream.on('end', () => { this.end(); }); stream.on('error', error => { this.emit('error', error); }); return this; } } N3.js-1.16.3/src/N3StreamWriter.js000066400000000000000000000021131433366257500164660ustar00rootroot00000000000000// **N3StreamWriter** serializes a quad stream into a text stream. import { Transform } from 'readable-stream'; import N3Writer from './N3Writer'; // ## Constructor export default class N3StreamWriter extends Transform { constructor(options) { super({ encoding: 'utf8', writableObjectMode: true }); // Set up writer with a dummy stream object const writer = this._writer = new N3Writer({ write: (quad, encoding, callback) => { this.push(quad); callback && callback(); }, end: callback => { this.push(null); callback && callback(); }, }, options); // Implement Transform methods on top of writer this._transform = (quad, encoding, done) => { writer.addQuad(quad, done); }; this._flush = done => { writer.end(done); }; } // ### Serializes a stream of quads import(stream) { stream.on('data', quad => { this.write(quad); }); stream.on('end', () => { this.end(); }); stream.on('error', error => { this.emit('error', error); }); stream.on('prefix', (prefix, iri) => { this._writer.addPrefix(prefix, iri); }); return this; } } N3.js-1.16.3/src/N3Util.js000066400000000000000000000041651433366257500147640ustar00rootroot00000000000000// **N3Util** provides N3 utility functions. import N3DataFactory from './N3DataFactory'; // Tests whether the given term represents an IRI export function isNamedNode(term) { return !!term && term.termType === 'NamedNode'; } // Tests whether the given term represents a blank node export function isBlankNode(term) { return !!term && term.termType === 'BlankNode'; } // Tests whether the given term represents a literal export function isLiteral(term) { return !!term && term.termType === 'Literal'; } // Tests whether the given term represents a variable export function isVariable(term) { return !!term && term.termType === 'Variable'; } // Tests whether the given term represents the default graph export function isDefaultGraph(term) { return !!term && term.termType === 'DefaultGraph'; } // Tests whether the given quad is in the default graph export function inDefaultGraph(quad) { return isDefaultGraph(quad.graph); } // Creates a function that prepends the given IRI to a local name export function prefix(iri, factory) { return prefixes({ '': iri.value || iri }, factory)(''); } // Creates a function that allows registering and expanding prefixes export function prefixes(defaultPrefixes, factory) { // Add all of the default prefixes const prefixes = Object.create(null); for (const prefix in defaultPrefixes) processPrefix(prefix, defaultPrefixes[prefix]); // Set the default factory if none was specified factory = factory || N3DataFactory; // Registers a new prefix (if an IRI was specified) // or retrieves a function that expands an existing prefix (if no IRI was specified) function processPrefix(prefix, iri) { // Create a new prefix if an IRI is specified or the prefix doesn't exist if (typeof iri === 'string') { // Create a function that expands the prefix const cache = Object.create(null); prefixes[prefix] = local => { return cache[local] || (cache[local] = factory.namedNode(iri + local)); }; } else if (!(prefix in prefixes)) { throw new Error(`Unknown prefix: ${prefix}`); } return prefixes[prefix]; } return processPrefix; } N3.js-1.16.3/src/N3Writer.js000066400000000000000000000334731433366257500153270ustar00rootroot00000000000000// **N3Writer** writes N3 documents. import namespaces from './IRIs'; import { default as N3DataFactory, Term } from './N3DataFactory'; import { isDefaultGraph } from './N3Util'; const DEFAULTGRAPH = N3DataFactory.defaultGraph(); const { rdf, xsd } = namespaces; // Characters in literals that require escaping const escape = /["\\\t\n\r\b\f\u0000-\u0019\ud800-\udbff]/, escapeAll = /["\\\t\n\r\b\f\u0000-\u0019]|[\ud800-\udbff][\udc00-\udfff]/g, escapedCharacters = { '\\': '\\\\', '"': '\\"', '\t': '\\t', '\n': '\\n', '\r': '\\r', '\b': '\\b', '\f': '\\f', }; // ## Placeholder class to represent already pretty-printed terms class SerializedTerm extends Term { // Pretty-printed nodes are not equal to any other node // (e.g., [] does not equal []) equals() { return false; } } // ## Constructor export default class N3Writer { constructor(outputStream, options) { // ### `_prefixRegex` matches a prefixed name or IRI that begins with one of the added prefixes this._prefixRegex = /$0^/; // Shift arguments if the first argument is not a stream if (outputStream && typeof outputStream.write !== 'function') options = outputStream, outputStream = null; options = options || {}; this._lists = options.lists; // If no output stream given, send the output as string through the end callback if (!outputStream) { let output = ''; this._outputStream = { write(chunk, encoding, done) { output += chunk; done && done(); }, end: done => { done && done(null, output); }, }; this._endStream = true; } else { this._outputStream = outputStream; this._endStream = options.end === undefined ? true : !!options.end; } // Initialize writer, depending on the format this._subject = null; if (!(/triple|quad/i).test(options.format)) { this._lineMode = false; this._graph = DEFAULTGRAPH; this._prefixIRIs = Object.create(null); options.prefixes && this.addPrefixes(options.prefixes); if (options.baseIRI) { this._baseMatcher = new RegExp(`^${escapeRegex(options.baseIRI) }${options.baseIRI.endsWith('/') ? '' : '[#?]'}`); this._baseLength = options.baseIRI.length; } } else { this._lineMode = true; this._writeQuad = this._writeQuadLine; } } // ## Private methods // ### Whether the current graph is the default graph get _inDefaultGraph() { return DEFAULTGRAPH.equals(this._graph); } // ### `_write` writes the argument to the output stream _write(string, callback) { this._outputStream.write(string, 'utf8', callback); } // ### `_writeQuad` writes the quad to the output stream _writeQuad(subject, predicate, object, graph, done) { try { // Write the graph's label if it has changed if (!graph.equals(this._graph)) { // Close the previous graph and start the new one this._write((this._subject === null ? '' : (this._inDefaultGraph ? '.\n' : '\n}\n')) + (DEFAULTGRAPH.equals(graph) ? '' : `${this._encodeIriOrBlank(graph)} {\n`)); this._graph = graph; this._subject = null; } // Don't repeat the subject if it's the same if (subject.equals(this._subject)) { // Don't repeat the predicate if it's the same if (predicate.equals(this._predicate)) this._write(`, ${this._encodeObject(object)}`, done); // Same subject, different predicate else this._write(`;\n ${ this._encodePredicate(this._predicate = predicate)} ${ this._encodeObject(object)}`, done); } // Different subject; write the whole quad else this._write(`${(this._subject === null ? '' : '.\n') + this._encodeSubject(this._subject = subject)} ${ this._encodePredicate(this._predicate = predicate)} ${ this._encodeObject(object)}`, done); } catch (error) { done && done(error); } } // ### `_writeQuadLine` writes the quad to the output stream as a single line _writeQuadLine(subject, predicate, object, graph, done) { // Write the quad without prefixes delete this._prefixMatch; this._write(this.quadToString(subject, predicate, object, graph), done); } // ### `quadToString` serializes a quad as a string quadToString(subject, predicate, object, graph) { return `${this._encodeSubject(subject)} ${ this._encodeIriOrBlank(predicate)} ${ this._encodeObject(object) }${graph && graph.value ? ` ${this._encodeIriOrBlank(graph)} .\n` : ' .\n'}`; } // ### `quadsToString` serializes an array of quads as a string quadsToString(quads) { return quads.map(t => { return this.quadToString(t.subject, t.predicate, t.object, t.graph); }).join(''); } // ### `_encodeSubject` represents a subject _encodeSubject(entity) { return entity.termType === 'Quad' ? this._encodeQuad(entity) : this._encodeIriOrBlank(entity); } // ### `_encodeIriOrBlank` represents an IRI or blank node _encodeIriOrBlank(entity) { // A blank node or list is represented as-is if (entity.termType !== 'NamedNode') { // If it is a list head, pretty-print it if (this._lists && (entity.value in this._lists)) entity = this.list(this._lists[entity.value]); return 'id' in entity ? entity.id : `_:${entity.value}`; } let iri = entity.value; // Use relative IRIs if requested and possible if (this._baseMatcher && this._baseMatcher.test(iri)) iri = iri.substr(this._baseLength); // Escape special characters if (escape.test(iri)) iri = iri.replace(escapeAll, characterReplacer); // Try to represent the IRI as prefixed name const prefixMatch = this._prefixRegex.exec(iri); return !prefixMatch ? `<${iri}>` : (!prefixMatch[1] ? iri : this._prefixIRIs[prefixMatch[1]] + prefixMatch[2]); } // ### `_encodeLiteral` represents a literal _encodeLiteral(literal) { // Escape special characters let value = literal.value; if (escape.test(value)) value = value.replace(escapeAll, characterReplacer); // Write a language-tagged literal if (literal.language) return `"${value}"@${literal.language}`; // Write dedicated literals per data type if (this._lineMode) { // Only abbreviate strings in N-Triples or N-Quads if (literal.datatype.value === xsd.string) return `"${value}"`; } else { // Use common datatype abbreviations in Turtle or TriG switch (literal.datatype.value) { case xsd.string: return `"${value}"`; case xsd.boolean: if (value === 'true' || value === 'false') return value; break; case xsd.integer: if (/^[+-]?\d+$/.test(value)) return value; break; case xsd.decimal: if (/^[+-]?\d*\.\d+$/.test(value)) return value; break; case xsd.double: if (/^[+-]?(?:\d+\.\d*|\.?\d+)[eE][+-]?\d+$/.test(value)) return value; break; } } // Write a regular datatyped literal return `"${value}"^^${this._encodeIriOrBlank(literal.datatype)}`; } // ### `_encodePredicate` represents a predicate _encodePredicate(predicate) { return predicate.value === rdf.type ? 'a' : this._encodeIriOrBlank(predicate); } // ### `_encodeObject` represents an object _encodeObject(object) { switch (object.termType) { case 'Quad': return this._encodeQuad(object); case 'Literal': return this._encodeLiteral(object); default: return this._encodeIriOrBlank(object); } } // ### `_encodeQuad` encodes an RDF* quad _encodeQuad({ subject, predicate, object, graph }) { return `<<${ this._encodeSubject(subject)} ${ this._encodePredicate(predicate)} ${ this._encodeObject(object)}${ isDefaultGraph(graph) ? '' : ` ${this._encodeIriOrBlank(graph)}`}>>`; } // ### `_blockedWrite` replaces `_write` after the writer has been closed _blockedWrite() { throw new Error('Cannot write because the writer has been closed.'); } // ### `addQuad` adds the quad to the output stream addQuad(subject, predicate, object, graph, done) { // The quad was given as an object, so shift parameters if (object === undefined) this._writeQuad(subject.subject, subject.predicate, subject.object, subject.graph, predicate); // The optional `graph` parameter was not provided else if (typeof graph === 'function') this._writeQuad(subject, predicate, object, DEFAULTGRAPH, graph); // The `graph` parameter was provided else this._writeQuad(subject, predicate, object, graph || DEFAULTGRAPH, done); } // ### `addQuads` adds the quads to the output stream addQuads(quads) { for (let i = 0; i < quads.length; i++) this.addQuad(quads[i]); } // ### `addPrefix` adds the prefix to the output stream addPrefix(prefix, iri, done) { const prefixes = {}; prefixes[prefix] = iri; this.addPrefixes(prefixes, done); } // ### `addPrefixes` adds the prefixes to the output stream addPrefixes(prefixes, done) { // Ignore prefixes if not supported by the serialization if (!this._prefixIRIs) return done && done(); // Write all new prefixes let hasPrefixes = false; for (let prefix in prefixes) { let iri = prefixes[prefix]; if (typeof iri !== 'string') iri = iri.value; hasPrefixes = true; // Finish a possible pending quad if (this._subject !== null) { this._write(this._inDefaultGraph ? '.\n' : '\n}\n'); this._subject = null, this._graph = ''; } // Store and write the prefix this._prefixIRIs[iri] = (prefix += ':'); this._write(`@prefix ${prefix} <${iri}>.\n`); } // Recreate the prefix matcher if (hasPrefixes) { let IRIlist = '', prefixList = ''; for (const prefixIRI in this._prefixIRIs) { IRIlist += IRIlist ? `|${prefixIRI}` : prefixIRI; prefixList += (prefixList ? '|' : '') + this._prefixIRIs[prefixIRI]; } IRIlist = escapeRegex(IRIlist, /[\]\/\(\)\*\+\?\.\\\$]/g, '\\$&'); this._prefixRegex = new RegExp(`^(?:${prefixList})[^\/]*$|` + `^(${IRIlist})([_a-zA-Z][\\-_a-zA-Z0-9]*)$`); } // End a prefix block with a newline this._write(hasPrefixes ? '\n' : '', done); } // ### `blank` creates a blank node with the given content blank(predicate, object) { let children = predicate, child, length; // Empty blank node if (predicate === undefined) children = []; // Blank node passed as blank(Term("predicate"), Term("object")) else if (predicate.termType) children = [{ predicate: predicate, object: object }]; // Blank node passed as blank({ predicate: predicate, object: object }) else if (!('length' in predicate)) children = [predicate]; switch (length = children.length) { // Generate an empty blank node case 0: return new SerializedTerm('[]'); // Generate a non-nested one-triple blank node case 1: child = children[0]; if (!(child.object instanceof SerializedTerm)) return new SerializedTerm(`[ ${this._encodePredicate(child.predicate)} ${ this._encodeObject(child.object)} ]`); // Generate a multi-triple or nested blank node default: let contents = '['; // Write all triples in order for (let i = 0; i < length; i++) { child = children[i]; // Write only the object is the predicate is the same as the previous if (child.predicate.equals(predicate)) contents += `, ${this._encodeObject(child.object)}`; // Otherwise, write the predicate and the object else { contents += `${(i ? ';\n ' : '\n ') + this._encodePredicate(child.predicate)} ${ this._encodeObject(child.object)}`; predicate = child.predicate; } } return new SerializedTerm(`${contents}\n]`); } } // ### `list` creates a list node with the given content list(elements) { const length = elements && elements.length || 0, contents = new Array(length); for (let i = 0; i < length; i++) contents[i] = this._encodeObject(elements[i]); return new SerializedTerm(`(${contents.join(' ')})`); } // ### `end` signals the end of the output stream end(done) { // Finish a possible pending quad if (this._subject !== null) { this._write(this._inDefaultGraph ? '.\n' : '\n}\n'); this._subject = null; } // Disallow further writing this._write = this._blockedWrite; // Try to end the underlying stream, ensuring done is called exactly one time let singleDone = done && ((error, result) => { singleDone = null, done(error, result); }); if (this._endStream) { try { return this._outputStream.end(singleDone); } catch (error) { /* error closing stream */ } } singleDone && singleDone(); } } // Replaces a character by its escaped version function characterReplacer(character) { // Replace a single character by its escaped version let result = escapedCharacters[character]; if (result === undefined) { // Replace a single character with its 4-bit unicode escape sequence if (character.length === 1) { result = character.charCodeAt(0).toString(16); result = '\\u0000'.substr(0, 6 - result.length) + result; } // Replace a surrogate pair with its 8-bit unicode escape sequence else { result = ((character.charCodeAt(0) - 0xD800) * 0x400 + character.charCodeAt(1) + 0x2400).toString(16); result = '\\U00000000'.substr(0, 10 - result.length) + result; } } return result; } function escapeRegex(regex) { return regex.replace(/[\]\/\(\)\*\+\?\.\\\$]/g, '\\$&'); } N3.js-1.16.3/src/index.js000066400000000000000000000017311433366257500147510ustar00rootroot00000000000000import Lexer from './N3Lexer'; import Parser from './N3Parser'; import Writer from './N3Writer'; import Store from './N3Store'; import StreamParser from './N3StreamParser'; import StreamWriter from './N3StreamWriter'; import * as Util from './N3Util'; import { default as DataFactory, Term, NamedNode, Literal, BlankNode, Variable, DefaultGraph, Quad, Triple, termFromId, termToId, } from './N3DataFactory'; // Named exports export { Lexer, Parser, Writer, Store, StreamParser, StreamWriter, Util, DataFactory, Term, NamedNode, Literal, BlankNode, Variable, DefaultGraph, Quad, Triple, termFromId, termToId, }; // Export all named exports as a default object for backward compatibility export default { Lexer, Parser, Writer, Store, StreamParser, StreamWriter, Util, DataFactory, Term, NamedNode, Literal, BlankNode, Variable, DefaultGraph, Quad, Triple, termFromId, termToId, }; N3.js-1.16.3/test/000077500000000000000000000000001433366257500134725ustar00rootroot00000000000000N3.js-1.16.3/test/.eslintrc000066400000000000000000000004541433366257500153210ustar00rootroot00000000000000{ globals: { describe: true, it: true, before: true, after: true, beforeEach: true, afterEach: true, expect: true, }, rules: { max-nested-callbacks: 0, // Mocha works with deeply nested callbacks new-cap: 0, // test constructors as regular functions }, } N3.js-1.16.3/test/BlankNode-test.js000066400000000000000000000043251433366257500166460ustar00rootroot00000000000000import { BlankNode, Term } from '../src/'; describe('BlankNode', () => { describe('The BlankNode module', () => { it('should be a function', () => { BlankNode.should.be.a('function'); }); it('should be a BlankNode constructor', () => { new BlankNode().should.be.an.instanceof(BlankNode); }); it('should be a Term constructor', () => { new BlankNode().should.be.an.instanceof(Term); }); }); describe('A BlankNode instance created from a name', () => { let blankNode; before(() => { blankNode = new BlankNode('b1'); }); it('should be a BlankNode', () => { blankNode.should.be.an.instanceof(BlankNode); }); it('should be a Term', () => { blankNode.should.be.an.instanceof(Term); }); it('should have term type "BlankNode"', () => { blankNode.termType.should.equal('BlankNode'); }); it('should have the name as value', () => { blankNode.should.have.property('value', 'b1'); }); it('should have "_:name" as id', () => { blankNode.should.have.property('id', '_:b1'); }); it('should equal a BlankNode instance with the same name', () => { blankNode.equals(new BlankNode('b1')).should.be.true; }); it('should equal an object with the same term type and value', () => { blankNode.equals({ termType: 'BlankNode', value: 'b1', }).should.be.true; }); it('should not equal a falsy object', () => { blankNode.equals(null).should.be.false; }); it('should not equal a BlankNode instance with another name', () => { blankNode.equals(new BlankNode('b2')).should.be.false; }); it('should not equal an object with the same term type but a different value', () => { blankNode.equals({ termType: 'BlankNode', value: 'b2', }).should.be.false; }); it('should not equal an object with a different term type but the same value', () => { blankNode.equals({ termType: 'NamedNode', value: 'b1', }).should.be.false; }); it('should provide a JSON representation', () => { blankNode.toJSON().should.deep.equal({ termType: 'BlankNode', value: 'b1', }); }); }); }); N3.js-1.16.3/test/DefaultGraph-test.js000066400000000000000000000035521433366257500173600ustar00rootroot00000000000000import { DefaultGraph, Term } from '../src/'; describe('DefaultGraph', () => { describe('The DefaultGraph module', () => { it('should be a function', () => { DefaultGraph.should.be.a('function'); }); it('should be a DefaultGraph constructor', () => { new DefaultGraph().should.be.an.instanceof(DefaultGraph); }); it('should be a Term constructor', () => { new DefaultGraph().should.be.an.instanceof(Term); }); }); describe('A DefaultGraph instance', () => { let defaultGraph; before(() => { defaultGraph = new DefaultGraph(); }); it('should be a DefaultGraph', () => { defaultGraph.should.be.an.instanceof(DefaultGraph); }); it('should be a Term', () => { defaultGraph.should.be.an.instanceof(Term); }); it('should have term type "DefaultGraph"', () => { defaultGraph.termType.should.equal('DefaultGraph'); }); it('should have the empty string as value', () => { defaultGraph.should.have.property('value', ''); }); it('should have the empty string as id', () => { defaultGraph.should.have.property('id', ''); }); it('should equal another DefaultGraph instance', () => { defaultGraph.equals(new DefaultGraph()).should.be.true; }); it('should equal an object with the same term type', () => { defaultGraph.equals({ termType: 'DefaultGraph', }).should.be.true; }); it('should not equal a falsy object', () => { defaultGraph.equals(null).should.be.false; }); it('should not equal an object with a different term type', () => { defaultGraph.equals({ termType: 'Literal', }).should.be.false; }); it('should provide a JSON representation', () => { defaultGraph.toJSON().should.deep.equal({ termType: 'DefaultGraph', value: '', }); }); }); }); N3.js-1.16.3/test/Literal-test.js000066400000000000000000000506721433366257500164130ustar00rootroot00000000000000import { Literal, NamedNode, Term } from '../src/'; describe('Literal', () => { describe('The Literal module', () => { it('should be a function', () => { Literal.should.be.a('function'); }); it('should be a Literal constructor', () => { new Literal().should.be.an.instanceof(Literal); }); it('should be a Term constructor', () => { new Literal().should.be.an.instanceof(Term); }); }); describe('A Literal instance created from the empty string without language or datatype', () => { let literal; before(() => { literal = new Literal('""'); }); it('should be a Literal', () => { literal.should.be.an.instanceof(Literal); }); it('should be a Term', () => { literal.should.be.an.instanceof(Term); }); it('should have term type "Literal"', () => { literal.termType.should.equal('Literal'); }); it('should have the empty string as value', () => { literal.should.have.property('value', ''); }); it('should have the empty string as language', () => { literal.should.have.property('language', ''); }); it('should have xsd:string as datatype', () => { literal.should.have.property('datatype'); literal.datatype.should.be.an.instanceof(NamedNode); literal.datatype.value.should.equal('http://www.w3.org/2001/XMLSchema#string'); }); it('should have the quoted empty string as id', () => { literal.should.have.property('id', '""'); }); it('should equal a Literal instance with the same value', () => { literal.equals(new Literal('""')).should.be.true; }); it('should equal an object with the same term type, value, language, and datatype', () => { literal.equals({ termType: 'Literal', value: '', language: '', datatype: { value: 'http://www.w3.org/2001/XMLSchema#string', termType: 'NamedNode' }, }).should.be.true; }); it('should not equal a falsy object', () => { literal.equals(null).should.be.false; }); it('should not equal a Literal instance with a non-empty value', () => { literal.equals(new Literal('"x"')).should.be.false; }); it('should not equal an object with the same term type but a different value', () => { literal.equals({ termType: 'Literal', value: 'x', language: '', datatype: { value: 'http://www.w3.org/2001/XMLSchema#string', termType: 'NamedNode' }, }).should.be.false; }); it('should not equal an object with the same term type but a different language', () => { literal.equals({ termType: 'Literal', value: '', language: 'en', datatype: { value: 'http://www.w3.org/2001/XMLSchema#string', termType: 'NamedNode' }, }).should.be.false; }); it('should not equal an object with the same term type but a different datatype', () => { literal.equals({ termType: 'Literal', value: '', language: '', datatype: { value: 'other', termType: 'NamedNode' }, }).should.be.false; }); it('should not equal an object with a different term type', () => { literal.equals({ termType: 'NamedNode', value: '', language: '', datatype: { value: 'http://www.w3.org/2001/XMLSchema#string', termType: 'NamedNode' }, }).should.be.false; }); it('should provide a JSON representation', () => { literal.toJSON().should.deep.equal({ termType: 'Literal', value: '', language: '', datatype: { termType: 'NamedNode', value: 'http://www.w3.org/2001/XMLSchema#string', }, }); }); }); describe('A Literal instance created from a string without language or datatype', () => { let literal; before(() => { literal = new Literal('"my @^^ string"'); }); it('should be a Literal', () => { literal.should.be.an.instanceof(Literal); }); it('should be a Term', () => { literal.should.be.an.instanceof(Term); }); it('should have term type "Literal"', () => { literal.termType.should.equal('Literal'); }); it('should have the text value as value', () => { literal.should.have.property('value', 'my @^^ string'); }); it('should have the empty string as language', () => { literal.should.have.property('language', ''); }); it('should have xsd:string as datatype', () => { literal.should.have.property('datatype'); literal.datatype.should.be.an.instanceof(NamedNode); literal.datatype.value.should.equal('http://www.w3.org/2001/XMLSchema#string'); }); it('should have the quoted string as id', () => { literal.should.have.property('id', '"my @^^ string"'); }); it('should equal a Literal instance with the same value', () => { literal.equals(new Literal('"my @^^ string"')).should.be.true; }); it('should equal an object with the same term type, value, language, and datatype', () => { literal.equals({ termType: 'Literal', value: 'my @^^ string', language: '', datatype: { value: 'http://www.w3.org/2001/XMLSchema#string', termType: 'NamedNode' }, }).should.be.true; }); it('should not equal a falsy object', () => { literal.equals(null).should.be.false; }); it('should not equal a Literal instance with another value', () => { literal.equals(new Literal('"other string"')).should.be.false; }); it('should not equal an object with the same term type but a different value', () => { literal.equals({ termType: 'Literal', value: 'other string', language: '', datatype: { value: 'http://www.w3.org/2001/XMLSchema#string', termType: 'NamedNode' }, }).should.be.false; }); it('should not equal an object with the same term type but a different language', () => { literal.equals({ termType: 'Literal', value: 'my @^^ string', language: 'en', datatype: { value: 'http://www.w3.org/2001/XMLSchema#string', termType: 'NamedNode' }, }).should.be.false; }); it('should not equal an object with the same term type but a different datatype', () => { literal.equals({ termType: 'Literal', value: 'my @^^ string', language: '', datatype: { value: 'other', termType: 'NamedNode' }, }).should.be.false; }); it('should not equal an object with a different term type', () => { literal.equals({ termType: 'NamedNode', value: 'my @^^ string', language: '', datatype: { value: 'http://www.w3.org/2001/XMLSchema#string', termType: 'NamedNode' }, }).should.be.false; }); it('should provide a JSON representation', () => { literal.toJSON().should.deep.equal({ termType: 'Literal', value: 'my @^^ string', language: '', datatype: { termType: 'NamedNode', value: 'http://www.w3.org/2001/XMLSchema#string', }, }); }); }); describe('A Literal instance created from the empty string with a language', () => { let literal; before(() => { literal = new Literal('""@en-us'); }); it('should be a Literal', () => { literal.should.be.an.instanceof(Literal); }); it('should be a Term', () => { literal.should.be.an.instanceof(Term); }); it('should have term type "Literal"', () => { literal.termType.should.equal('Literal'); }); it('should have the empty string as value', () => { literal.should.have.property('value', ''); }); it('should have the language tag as language', () => { literal.should.have.property('language', 'en-us'); }); it('should have rdf:langString as datatype', () => { literal.should.have.property('datatype'); literal.datatype.should.be.an.instanceof(NamedNode); literal.datatype.value.should.equal('http://www.w3.org/1999/02/22-rdf-syntax-ns#langString'); }); it('should have the quoted empty string as id', () => { literal.should.have.property('id', '""@en-us'); }); it('should equal a Literal instance with the same value', () => { literal.equals(new Literal('""@en-us')).should.be.true; }); it('should equal an object with the same term type, value, language, and datatype', () => { literal.equals({ termType: 'Literal', value: '', language: 'en-us', datatype: { value: 'http://www.w3.org/1999/02/22-rdf-syntax-ns#langString', termType: 'NamedNode' }, }).should.be.true; }); it('should not equal a falsy object', () => { literal.equals(null).should.be.false; }); it('should not equal a Literal instance with a non-empty value', () => { literal.equals(new Literal('"x"')).should.be.false; }); it('should not equal an object with the same term type but a different value', () => { literal.equals({ termType: 'Literal', value: 'x', language: 'en-us', datatype: { value: 'http://www.w3.org/1999/02/22-rdf-syntax-ns#langString', termType: 'NamedNode' }, }).should.be.false; }); it('should not equal an object with the same term type but a different language', () => { literal.equals({ termType: 'Literal', value: '', language: '', datatype: { value: 'http://www.w3.org/1999/02/22-rdf-syntax-ns#langString', termType: 'NamedNode' }, }).should.be.false; }); it('should not equal an object with the same term type but a different datatype', () => { literal.equals({ termType: 'Literal', value: '', language: 'en-us', datatype: { value: 'other', termType: 'NamedNode' }, }).should.be.false; }); it('should not equal an object with a different term type', () => { literal.equals({ termType: 'NamedNode', value: '', language: 'en-us', datatype: { value: 'http://www.w3.org/1999/02/22-rdf-syntax-ns#langString', termType: 'NamedNode' }, }).should.be.false; }); it('should provide a JSON representation', () => { literal.toJSON().should.deep.equal({ termType: 'Literal', value: '', language: 'en-us', datatype: { termType: 'NamedNode', value: 'http://www.w3.org/1999/02/22-rdf-syntax-ns#langString', }, }); }); }); describe('A Literal instance created from a string without language or datatype', () => { let literal; before(() => { literal = new Literal('"my @^^ string"@en-us'); }); it('should be a Literal', () => { literal.should.be.an.instanceof(Literal); }); it('should be a Term', () => { literal.should.be.an.instanceof(Term); }); it('should have term type "Literal"', () => { literal.termType.should.equal('Literal'); }); it('should have the text value as value', () => { literal.should.have.property('value', 'my @^^ string'); }); it('should have the language tag as language', () => { literal.should.have.property('language', 'en-us'); }); it('should have rdf:langString as datatype', () => { literal.should.have.property('datatype'); literal.datatype.should.be.an.instanceof(NamedNode); literal.datatype.value.should.equal('http://www.w3.org/1999/02/22-rdf-syntax-ns#langString'); }); it('should have the quoted string as id', () => { literal.should.have.property('id', '"my @^^ string"@en-us'); }); it('should equal a Literal instance with the same value', () => { literal.equals(new Literal('"my @^^ string"@en-us')).should.be.true; }); it('should equal an object with the same term type, value, language, and datatype', () => { literal.equals({ termType: 'Literal', value: 'my @^^ string', language: 'en-us', datatype: { value: 'http://www.w3.org/1999/02/22-rdf-syntax-ns#langString', termType: 'NamedNode' }, }).should.be.true; }); it('should not equal a falsy object', () => { literal.equals(null).should.be.false; }); it('should not equal a Literal instance with another value', () => { literal.equals(new Literal('"other string"')).should.be.false; }); it('should not equal an object with the same term type but a different value', () => { literal.equals({ termType: 'Literal', value: 'other string', language: 'en-us', datatype: { value: 'http://www.w3.org/1999/02/22-rdf-syntax-ns#langString', termType: 'NamedNode' }, }).should.be.false; }); it('should not equal an object with the same term type but a different language', () => { literal.equals({ termType: 'Literal', value: 'my @^^ string', language: 'fr', datatype: { value: 'http://www.w3.org/1999/02/22-rdf-syntax-ns#langString', termType: 'NamedNode' }, }).should.be.false; }); it('should not equal an object with the same term type but a different datatype', () => { literal.equals({ termType: 'Literal', value: 'my @^^ string', language: 'en-us', datatype: { value: 'other', termType: 'NamedNode' }, }).should.be.false; }); it('should not equal an object with a different term type', () => { literal.equals({ termType: 'NamedNode', value: 'my @^^ string', language: 'en-us', datatype: { value: 'http://www.w3.org/1999/02/22-rdf-syntax-ns#langString', termType: 'NamedNode' }, }).should.be.false; }); it('should provide a JSON representation', () => { literal.toJSON().should.deep.equal({ termType: 'Literal', value: 'my @^^ string', language: 'en-us', datatype: { termType: 'NamedNode', value: 'http://www.w3.org/1999/02/22-rdf-syntax-ns#langString', }, }); }); }); describe('A Literal instance created from the empty string with a datatype', () => { let literal; before(() => { literal = new Literal('""^^http://example.org/types#type'); }); it('should be a Literal', () => { literal.should.be.an.instanceof(Literal); }); it('should be a Term', () => { literal.should.be.an.instanceof(Term); }); it('should have term type "Literal"', () => { literal.termType.should.equal('Literal'); }); it('should have the empty string as value', () => { literal.should.have.property('value', ''); }); it('should have the empty string as language', () => { literal.should.have.property('language', ''); }); it('should have the datatype', () => { literal.should.have.property('datatype'); literal.datatype.should.be.an.instanceof(NamedNode); literal.datatype.value.should.equal('http://example.org/types#type'); }); it('should have the quoted empty string as id', () => { literal.should.have.property('id', '""^^http://example.org/types#type'); }); it('should equal a Literal instance with the same value', () => { literal.equals(new Literal('""^^http://example.org/types#type')).should.be.true; }); it('should equal an object with the same term type, value, language, and datatype', () => { literal.equals({ termType: 'Literal', value: '', language: '', datatype: { value: 'http://example.org/types#type', termType: 'NamedNode' }, }).should.be.true; }); it('should not equal a falsy object', () => { literal.equals(null).should.be.false; }); it('should not equal a Literal instance with a non-empty value', () => { literal.equals(new Literal('"x"^^http://example.org/types#type')).should.be.false; }); it('should not equal an object with the same term type but a different value', () => { literal.equals({ termType: 'Literal', value: 'x', language: '', datatype: { value: 'http://example.org/types#type', termType: 'NamedNode' }, }).should.be.false; }); it('should not equal an object with the same term type but a different language', () => { literal.equals({ termType: 'Literal', value: '', language: 'en', datatype: { value: 'http://example.org/types#type', termType: 'NamedNode' }, }).should.be.false; }); it('should not equal an object with the same term type but a different datatype', () => { literal.equals({ termType: 'Literal', value: '', language: '', datatype: { value: 'other', termType: 'NamedNode' }, }).should.be.false; }); it('should not equal an object with a different term type', () => { literal.equals({ termType: 'NamedNode', value: '', language: '', datatype: { value: 'http://example.org/types#type', termType: 'NamedNode' }, }).should.be.false; }); it('should provide a JSON representation', () => { literal.toJSON().should.deep.equal({ termType: 'Literal', value: '', language: '', datatype: { termType: 'NamedNode', value: 'http://example.org/types#type', }, }); }); }); describe('A Literal instance created from a string with a datatype', () => { let literal; before(() => { literal = new Literal('"my @^^ string"^^http://example.org/types#type'); }); it('should be a Literal', () => { literal.should.be.an.instanceof(Literal); }); it('should be a Term', () => { literal.should.be.an.instanceof(Term); }); it('should have term type "Literal"', () => { literal.termType.should.equal('Literal'); }); it('should have the text value as value', () => { literal.should.have.property('value', 'my @^^ string'); }); it('should have the empty string as language', () => { literal.should.have.property('language', ''); }); it('should have the datatype', () => { literal.should.have.property('datatype'); literal.datatype.should.be.an.instanceof(NamedNode); literal.datatype.value.should.equal('http://example.org/types#type'); }); it('should have the quoted string as id', () => { literal.should.have.property('id', '"my @^^ string"^^http://example.org/types#type'); }); it('should equal a Literal instance with the same value', () => { literal.equals(new Literal('"my @^^ string"^^http://example.org/types#type')).should.be.true; }); it('should equal an object with the same term type, value, language, and datatype', () => { literal.equals({ termType: 'Literal', value: 'my @^^ string', language: '', datatype: { value: 'http://example.org/types#type', termType: 'NamedNode' }, }).should.be.true; }); it('should not equal a falsy object', () => { literal.equals(null).should.be.false; }); it('should not equal a Literal instance with another value', () => { literal.equals(new Literal('"other string"^^http://example.org/types#type')).should.be.false; }); it('should not equal an object with the same term type but a different value', () => { literal.equals({ termType: 'Literal', value: 'other string', language: '', datatype: { value: 'http://example.org/types#type', termType: 'NamedNode' }, }).should.be.false; }); it('should not equal an object with the same term type but a different language', () => { literal.equals({ termType: 'Literal', value: 'my @^^ string', language: 'en', datatype: { value: 'http://example.org/types#type', termType: 'NamedNode' }, }).should.be.false; }); it('should not equal an object with the same term type but a different datatype', () => { literal.equals({ termType: 'Literal', value: 'my @^^ string', language: '', datatype: { value: 'other', termType: 'NamedNode' }, }).should.be.false; }); it('should not equal an object with a different term type', () => { literal.equals({ termType: 'NamedNode', value: 'my @^^ string', language: '', datatype: { value: 'http://example.org/types#type', termType: 'NamedNode' }, }).should.be.false; }); it('should provide a JSON representation', () => { literal.toJSON().should.deep.equal({ termType: 'Literal', value: 'my @^^ string', language: '', datatype: { termType: 'NamedNode', value: 'http://example.org/types#type', }, }); }); }); }); N3.js-1.16.3/test/N3DataFactory-test.js000066400000000000000000000141551433366257500174150ustar00rootroot00000000000000import { DataFactory, NamedNode, Literal, BlankNode, Variable, DefaultGraph, Quad, } from '../src/'; describe('DataFactory', () => { describe('namedNode', () => { it('converts a plain IRI', () => { DataFactory.namedNode('http://ex.org/foo#bar').should.deep.equal(new NamedNode('http://ex.org/foo#bar')); }); }); describe('blankNode', () => { it('converts a label', () => { DataFactory.blankNode('abc').should.deep.equal(new BlankNode('abc')); }); it('creates an anonymous blank node', () => { DataFactory.blankNode().should.deep.equal(new BlankNode('n3-0')); DataFactory.blankNode().should.deep.equal(new BlankNode('n3-1')); }); it('does not create two equal anonymous blank nodes', () => { DataFactory.blankNode().should.not.deep.equal(DataFactory.blankNode()); }); }); describe('literal', () => { it('converts the empty string', () => { DataFactory.literal('').should.deep.equal(new Literal('""')); }); it('converts the empty string with a language', () => { DataFactory.literal('', 'en-GB').should.deep.equal(new Literal('""@en-gb')); }); it('converts the empty string with a named node type', () => { DataFactory.literal('', new NamedNode('http://ex.org/type')).should.deep.equal(new Literal('""^^http://ex.org/type')); }); it('converts a non-empty string', () => { DataFactory.literal('abc').should.deep.equal(new Literal('"abc"')); }); it('converts a non-empty string with a language', () => { DataFactory.literal('abc', 'en-GB').should.deep.equal(new Literal('"abc"@en-gb')); }); it('converts a non-empty string with a named node type', () => { DataFactory.literal('abc', new NamedNode('http://ex.org/type')).should.deep.equal(new Literal('"abc"^^http://ex.org/type')); }); it('converts a non-empty string with an xsd:string type', () => { DataFactory.literal('abc', new NamedNode('http://www.w3.org/2001/XMLSchema#string')).should.deep.equal(new Literal('"abc"')); }); it('converts an integer', () => { DataFactory.literal(123).should.deep.equal(new Literal('"123"^^http://www.w3.org/2001/XMLSchema#integer')); }); it('converts a double', () => { DataFactory.literal(2.3).should.deep.equal(new Literal('"2.3"^^http://www.w3.org/2001/XMLSchema#double')); }); it('converts Infinity', () => { DataFactory.literal(Infinity).should.deep.equal(new Literal('"INF"^^http://www.w3.org/2001/XMLSchema#double')); }); it('converts -Infinity', () => { DataFactory.literal(-Infinity).should.deep.equal(new Literal('"-INF"^^http://www.w3.org/2001/XMLSchema#double')); }); it('converts NaN', () => { DataFactory.literal(NaN).should.deep.equal(new Literal('"NaN"^^http://www.w3.org/2001/XMLSchema#double')); }); it('converts false', () => { DataFactory.literal(false).should.deep.equal(new Literal('"false"^^http://www.w3.org/2001/XMLSchema#boolean')); }); it('converts true', () => { DataFactory.literal(true).should.deep.equal(new Literal('"true"^^http://www.w3.org/2001/XMLSchema#boolean')); }); }); describe('variable', () => { it('converts a label', () => { DataFactory.variable('abc').should.deep.equal(new Variable('abc')); }); }); describe('defaultGraph', () => { it('returns the default graph', () => { DataFactory.defaultGraph().should.deep.equal(new DefaultGraph()); }); }); describe('triple', () => { it('returns a quad in the default graph', () => { DataFactory.triple( new NamedNode('http://ex.org/a'), new NamedNode('http://ex.org/b'), new Literal('abc') ).should.deep.equal(new Quad( new NamedNode('http://ex.org/a'), new NamedNode('http://ex.org/b'), new Literal('abc'), new DefaultGraph() )); }); }); describe('quad', () => { it('returns a quad', () => { DataFactory.quad( new NamedNode('http://ex.org/a'), new NamedNode('http://ex.org/b'), new Literal('abc'), new NamedNode('http://ex.org/d') ).should.deep.equal(new Quad( new NamedNode('http://ex.org/a'), new NamedNode('http://ex.org/b'), new Literal('abc'), new NamedNode('http://ex.org/d') )); }); it('should return a nested quad', () => { DataFactory.quad( new Quad( new NamedNode('http://ex.org/a'), new NamedNode('http://ex.org/b'), new Literal('abc'), new NamedNode('http://ex.org/d') ), new NamedNode('http://ex.org/b'), new Literal('abc'), new NamedNode('http://ex.org/d') ).should.deep.equal(new Quad( new Quad( new NamedNode('http://ex.org/a'), new NamedNode('http://ex.org/b'), new Literal('abc'), new NamedNode('http://ex.org/d') ), new NamedNode('http://ex.org/b'), new Literal('abc'), new NamedNode('http://ex.org/d') )); }); it('should return a nested quad', () => { DataFactory.quad( new NamedNode('http://ex.org/a'), new NamedNode('http://ex.org/b'), new Literal('abc'), new Quad( new NamedNode('http://ex.org/a'), new NamedNode('http://ex.org/b'), new Literal('abc'), new NamedNode('http://ex.org/d') ) ).should.deep.equal(new Quad( new NamedNode('http://ex.org/a'), new NamedNode('http://ex.org/b'), new Literal('abc'), new Quad( new NamedNode('http://ex.org/a'), new NamedNode('http://ex.org/b'), new Literal('abc'), new NamedNode('http://ex.org/d') ) )); }); it('without graph parameter returns a quad in the default graph', () => { DataFactory.quad( new NamedNode('http://ex.org/a'), new NamedNode('http://ex.org/b'), new Literal('abc') ).should.deep.equal(new Quad( new NamedNode('http://ex.org/a'), new NamedNode('http://ex.org/b'), new Literal('abc'), new DefaultGraph() )); }); }); }); N3.js-1.16.3/test/N3Lexer-test.js000066400000000000000000001744501433366257500163000ustar00rootroot00000000000000import { Lexer } from '../src/'; import queueMicrotask from 'queue-microtask'; import { EventEmitter } from 'events'; describe('Lexer', () => { describe('The Lexer export', () => { it('should be a function', () => { Lexer.should.be.a('function'); }); it('should be an Lexer constructor', () => { new Lexer().should.be.an.instanceof(Lexer); }); }); describe('A Lexer instance', () => { it('should tokenize the empty string', shouldTokenize('', { type: 'eof', line: 1 })); it('should tokenize byte order mark at beginning as empty string', shouldTokenize('\ufeff', { type: 'eof', line: 1 })); it('should tokenize a whitespace string', shouldTokenize(' \t \n ', { type: 'eof', line: 2 })); it('should tokenize an IRI', shouldTokenize('', { type: 'IRI', value: 'http://ex.org/?bla#foo', line: 1 }, { type: 'eof', line: 1 })); it('should tokenize a split IRI', shouldTokenize(streamOf('<', 'http://ex.org/?bla#foo>'), { type: 'IRI', value: 'http://ex.org/?bla#foo', line: 1 }, { type: 'eof', line: 1 })); it('should not tokenize an IRI with disallowed characters', shouldNotTokenize('', 'Unexpected "" on line 1.')); it('should not tokenize an IRI with escaped characters', shouldNotTokenize('', 'Unexpected "" on line 1.')); it('should not tokenize an IRI with disallowed escaped characters', shouldNotTokenize('', 'Unexpected "" on line 1.')); it('should not tokenize an IRI with invalid 4-digit unicode escapes', shouldNotTokenize('', 'Unexpected "" on line 1.')); it('should not tokenize an IRI with invalid 8-digit unicode escapes', shouldNotTokenize('', 'Unexpected "" on line 1.')); it('should not tokenize an IRI with a non-numeric 4-digit unicode escapes', done => { const stream = new EventEmitter(), lexer = new Lexer(); lexer.tokenize(stream, (error, token) => { error.should.be.an.instanceof(Error); error.message.should.equal('Unexpected "<\\uz234>" on line 1.'); done(token); }); stream.emit('data', '<\\uz234>'); }); it('should not tokenize an IRI with a non-numeric 8-digit unicode escapes', done => { const stream = new EventEmitter(), lexer = new Lexer(); lexer.tokenize(stream, (error, token) => { error.should.be.an.instanceof(Error); error.message.should.equal('Unexpected "<\\Uz2345678>" on line 1.'); done(token); }); stream.emit('data', '<\\Uz2345678>'); }); it('should tokenize an IRI with four-digit unicode escapes', shouldTokenize('', { type: 'IRI', value: 'http://a.example/s', line: 1 }, { type: 'eof', line: 1 })); it('should tokenize an IRI with eight-digit unicode escapes', shouldTokenize('', { type: 'IRI', value: 'http://a.example/s\uffc0\udc73', line: 1 }, { type: 'eof', line: 1 })); it('should not decode an IRI', shouldTokenize('', { type: 'IRI', value: 'http://a.example/%66oo-bar', line: 1 }, { type: 'eof', line: 1 })); it('should tokenize two IRIs separated by whitespace', shouldTokenize(' \n\t \n\t \n\t', { type: 'IRI', value: 'http://ex.org/?bla#foo', line: 2 }, { type: 'IRI', value: 'http://ex.org/?bla#bar', line: 3 }, { type: 'eof', line: 4 })); it('should tokenize a statement with IRIs', shouldTokenize(' \n\t \n\t \n\t .', { type: 'IRI', value: 'http://ex.org/?bla#foo', line: 2 }, { type: 'IRI', value: 'http://ex.org/?bla#bar', line: 3 }, { type: 'IRI', value: 'http://ex.org/?bla#boo', line: 4 }, { type: '.', line: 4 }, { type: 'eof', line: 4 })); it('should tokenize prefixed names', shouldTokenize(':a b:c d-dd:e-ee.', { type: 'prefixed', prefix: '', value: 'a', line: 1 }, { type: 'prefixed', prefix: 'b', value: 'c', line: 1 }, { type: 'prefixed', prefix: 'd-dd', value: 'e-ee', line: 1 }, { type: '.', line: 1 }, { type: 'eof', line: 1 })); it('should tokenize prefixed names with leading digits', shouldTokenize('leg:3032571 isbn13:9780136019701 ', { type: 'prefixed', prefix: 'leg', value: '3032571', line: 1 }, { type: 'prefixed', prefix: 'isbn13', value: '9780136019701', line: 1 }, { type: 'eof', line: 1 })); it('should tokenize prefixed names starting with true', shouldTokenize('true:a truer:b ', { type: 'prefixed', prefix: 'true', value: 'a', line: 1 }, { type: 'prefixed', prefix: 'truer', value: 'b', line: 1 }, { type: 'eof', line: 1 })); it('should tokenize prefixed names starting with false', shouldTokenize('false:a falser:b ', { type: 'prefixed', prefix: 'false', value: 'a', line: 1 }, { type: 'prefixed', prefix: 'falser', value: 'b', line: 1 }, { type: 'eof', line: 1 })); it('should tokenize prefixed names with non-leading colons', shouldTokenize('og:video:height ', { type: 'prefixed', prefix: 'og', value: 'video:height', line: 1 }, { type: 'eof', line: 1 })); it('should tokenize prefixed names with reserved escape sequences', shouldTokenize('wgs:lat\\-long ', { type: 'prefixed', prefix: 'wgs', value: 'lat-long', line: 1 }, { type: 'eof', line: 1 })); it('should tokenize the colon prefixed name', shouldTokenize(': : :.', { type: 'prefixed', prefix: '', value: '', line: 1 }, { type: 'prefixed', prefix: '', value: '', line: 1 }, { type: 'prefixed', prefix: '', value: '', line: 1 }, { type: '.', line: 1 }, { type: 'eof', line: 1 })); it('should tokenize a prefixed name with a dot, split in half while streaming', shouldTokenize(streamOf('dbpedia:Anthony_J._Batt', 'aglia '), { type: 'prefixed', prefix: 'dbpedia', value: 'Anthony_J._Battaglia', line: 1 }, { type: 'eof', line: 1 })); it('should tokenize a prefixed name with a dot, split after the dot while streaming', shouldTokenize(streamOf('dbpedia:Anthony_J.', '_Battaglia '), { type: 'prefixed', prefix: 'dbpedia', value: 'Anthony_J._Battaglia', line: 1 }, { type: 'eof', line: 1 })); it('should tokenize a blank node with a dot, split in half while streaming', shouldTokenize(streamOf('_:Anthony_J._Batt', 'aglia '), { type: 'blank', prefix: '_', value: 'Anthony_J._Battaglia', line: 1 }, { type: 'eof', line: 1 })); it('should tokenize a blank node with a dot, split after the dot while streaming', shouldTokenize(streamOf('_:Anthony_J.', '_Battaglia '), { type: 'blank', prefix: '_', value: 'Anthony_J._Battaglia', line: 1 }, { type: 'eof', line: 1 })); it('should not decode a prefixed name', shouldTokenize('ex:%66oo-bar ', { type: 'prefixed', prefix: 'ex', value: '%66oo-bar', line: 1 }, { type: 'eof', line: 1 })); it('should not tokenize a prefixed name with disallowed characters', shouldNotTokenize('ex:bla"foo', 'Unexpected ""foo" on line 1.')); it('should not tokenize a prefixed name with escaped characters', shouldNotTokenize('ex:bla\\"foo', 'Unexpected "ex:bla\\"foo" on line 1.')); it('should not tokenize a prefixed name with disallowed escaped characters', shouldNotTokenize('ex:bla\\u0020foo', 'Unexpected "ex:bla\\u0020foo" on line 1.')); it('should not tokenize a prefixed name with invalid 4-digit unicode escapes', shouldNotTokenize('ex:bla\\uXYZZfoo', 'Unexpected "ex:bla\\uXYZZfoo" on line 1.')); it('should not tokenize a prefixed name with invalid 8-digit unicode escapes', shouldNotTokenize('ex:bla\\uXYZZxyzzfoo', 'Unexpected "ex:bla\\uXYZZxyzzfoo" on line 1.')); it('should not tokenize a prefixed name with four-digit unicode escapes', shouldNotTokenize('ex:foo\\u0073bar', 'Unexpected "ex:foo\\u0073bar" on line 1.')); it('should not tokenize a prefixed name with eight-digit unicode escapes', shouldNotTokenize('ex:foo\\U00000073\\U00A00073bar', 'Unexpected "ex:foo\\U00000073\\U00A00073bar" on line 1.')); it('should tokenize two prefixed names separated by whitespace', shouldTokenize(' \n\tex:foo \n\tex:bar \n\t', { type: 'prefixed', prefix: 'ex', value: 'foo', line: 2 }, { type: 'prefixed', prefix: 'ex', value: 'bar', line: 3 }, { type: 'eof', line: 4 })); it('should tokenize a statement with prefixed names', shouldTokenize(' \n\tex:foo \n\tex:bar \n\tex:baz .', { type: 'prefixed', prefix: 'ex', value: 'foo', line: 2 }, { type: 'prefixed', prefix: 'ex', value: 'bar', line: 3 }, { type: 'prefixed', prefix: 'ex', value: 'baz', line: 4 }, { type: '.', line: 4 }, { type: 'eof', line: 4 })); it('should correctly recognize different types of newlines', shouldTokenize('\r\n\r\n.', { type: 'IRI', value: 'a', line: 1 }, { type: 'IRI', value: 'b', line: 2 }, { type: 'IRI', value: 'c', line: 3 }, { type: '.', line: 4 }, { type: 'eof', line: 4 })); it('should tokenize a single comment', shouldTokenize('#mycomment', { type: 'eof', line: 1 })); it('should tokenize a stream with split comment', shouldTokenize(streamOf('#mycom', 'ment'), { type: 'eof', line: 1 })); it('should ignore comments', shouldTokenize('<#foo> #mycomment\n <#foo> #mycomment \r# mycomment\n\n<#bla>#', { type: 'IRI', value: '#foo', line: 1 }, { type: 'IRI', value: '#foo', line: 2 }, { type: 'IRI', value: '#bla', line: 5 }, { type: 'eof', line: 5 })); it('should tokenize comments after abbreviations and local names', shouldTokenize('[a#\na:a#\n].', { type: '[', line: 1 }, { type: 'abbreviation', value: 'a', line: 1 }, { type: 'prefixed', prefix: 'a', value: 'a', line: 2 }, { type: ']', line: 3 }, { type: '.', line: 3 }, { type: 'eof', line: 3 })); it('should tokenize a quoted string literal', shouldTokenize('"string" ', { type: 'literal', value: 'string', line: 1 }, { type: 'eof', line: 1 })); it('should not tokenize a quoted string literal with a newline', shouldNotTokenize('"abc\ndef" ', 'Unexpected ""abc" on line 1.')); it('should not tokenize a quoted string literal with a carriage return', shouldNotTokenize('"abc\rdef" ', 'Unexpected ""abc" on line 1.')); it('should tokenize a triple quoted string literal', shouldTokenize('"""string"""', { type: 'literal', value: 'string', line: 1 }, { type: 'eof', line: 1 })); it('should tokenize a triple quoted string literal with quoted newlines inside', shouldTokenize('"""st"r\r\ni""\n\rng"""', { type: 'literal', value: 'st"r\r\ni""\n\rng', line: 1 }, { type: 'eof', line: 4 })); it('should tokenize a string with escape characters', shouldTokenize('"\\\\ \\\' \\" \\n \\r \\t \\ua1b2" \n """\\\\ \\\' \\" \\n \\r \\t \\U0000a1b2"""', { type: 'literal', value: '\\ \' " \n \r \t \ua1b2', line: 1 }, { type: 'literal', value: '\\ \' " \n \r \t \ua1b2', line: 2 }, { type: 'eof', line: 2 })); it('should not tokenize a string with invalid characters', shouldNotTokenize('"\\uXYZX" ', 'Unexpected ""\\uXYZX"" on line 1.')); it('should not tokenize a double-quoted string ending with an escaped quote', shouldNotTokenize('"abc\\"', 'Unexpected ""abc\\"" on line 1.')); it('should not tokenize a single-quoted string ending with an escaped quote', shouldNotTokenize("'abc\\'", 'Unexpected "\'abc\\\'" on line 1.')); it('should not tokenize a double-quoted string ending with a backslash and escaped quote', shouldNotTokenize('"abc\\\\\\"', 'Unexpected ""abc\\\\\\"" on line 1.')); it('should not tokenize a single-quoted string ending with a backslash and escaped quote', shouldNotTokenize("'abc\\\\\\'", 'Unexpected "\'abc\\\\\\\'" on line 1.')); it('should tokenize a double-quoted string ending in backslashes', shouldTokenize('"abc\\\\" "abc\\\\\\\\"', { type: 'literal', value: 'abc\\', line: 1 }, { type: 'literal', value: 'abc\\\\', line: 1 }, { type: 'eof', line: 1 })); it('should tokenize a single-quoted string ending in backslashes', shouldTokenize("'abc\\\\' 'abc\\\\\\\\'", { type: 'literal', value: 'abc\\', line: 1 }, { type: 'literal', value: 'abc\\\\', line: 1 }, { type: 'eof', line: 1 })); it('should not tokenize a triple-quoted string with invalid characters', shouldNotTokenize("'''\\uXYZX''' ", "Unexpected \"'''\\uXYZX'''\" on line 1.")); it('should tokenize a quoted string literal with language code', shouldTokenize('"string"@en "string"@nl-be "string"@EN ', { type: 'literal', value: 'string', line: 1 }, { type: 'langcode', value: 'en', line: 1 }, { type: 'literal', value: 'string', line: 1 }, { type: 'langcode', value: 'nl-be', line: 1 }, { type: 'literal', value: 'string', line: 1 }, { type: 'langcode', value: 'EN', line: 1 }, { type: 'eof', line: 1 })); it('should tokenize a quoted string literal with type', shouldTokenize('"stringA"^^ "stringB"^^ns:mytype ', { type: 'literal', value: 'stringA', line: 1 }, { type: 'typeIRI', value: 'type', line: 1 }, { type: 'literal', value: 'stringB', line: 1 }, { type: 'type', value: 'mytype', prefix: 'ns', line: 1 }, { type: 'eof', line: 1 })); it('should not tokenize a single hat', shouldNotTokenize('^', 'Unexpected "^" on line 1.')); it('should not tokenize a double hat followed by a non-IRI', shouldNotTokenize('^^1', 'Unexpected "1" on line 1.')); it('should tokenize a single-quoted string literal', shouldTokenize("'string' ", { type: 'literal', value: 'string', line: 1 }, { type: 'eof', line: 1 })); it('should tokenize a triple single-quoted string literal', shouldTokenize("'''string'''", { type: 'literal', value: 'string', line: 1 }, { type: 'eof', line: 1 })); it('should not tokenize a single-quoted string literal with a newline', shouldNotTokenize("'abc\ndef' ", 'Unexpected "\'abc" on line 1.')); it('should not tokenize a single-quoted string literal with a carriage return', shouldNotTokenize("'abc\rdef' ", 'Unexpected "\'abc" on line 1.')); it('should tokenize a triple single-quoted string literal with quotes newlines inside', shouldTokenize("'''st'r\ni''ng'''", { type: 'literal', value: 'st\'r\ni\'\'ng', line: 1 }, { type: 'eof', line: 2 })); it('should tokenize a single-quoted string with escape characters', shouldTokenize("'\\\\ \\\" \\' \\n \\r \\t \\ua1b2' \n '''\\\\ \\\" \\' \\n \\r \\t \\U0020a1b2'''", { type: 'literal', value: '\\ " \' \n \r \t \ua1b2', line: 1 }, { type: 'literal', value: '\\ " \' \n \r \t \udfe8\uddb2', line: 2 }, { type: 'eof', line: 2 })); it('should tokenize a single-quoted string literal with language code', shouldTokenize("'string'@en 'string'@nl-be 'string'@EN ", { type: 'literal', value: 'string', line: 1 }, { type: 'langcode', value: 'en', line: 1 }, { type: 'literal', value: 'string', line: 1 }, { type: 'langcode', value: 'nl-be', line: 1 }, { type: 'literal', value: 'string', line: 1 }, { type: 'langcode', value: 'EN', line: 1 }, { type: 'eof', line: 1 })); it('should tokenize a single-quoted string literal with type', shouldTokenize("'stringA'^^ 'stringB'^^ns:mytype ", { type: 'literal', value: 'stringA', line: 1 }, { type: 'typeIRI', value: 'type', line: 1 }, { type: 'literal', value: 'stringB', line: 1 }, { type: 'type', value: 'mytype', prefix: 'ns', line: 1 }, { type: 'eof', line: 1 })); it('should tokenize an integer literal', shouldTokenize('10, +20. -30, 40. ', { type: 'literal', value: '10', prefix: 'http://www.w3.org/2001/XMLSchema#integer', line: 1 }, { type: ',', line: 1 }, { type: 'literal', value: '+20', prefix: 'http://www.w3.org/2001/XMLSchema#integer', line: 1 }, { type: '.', line: 1 }, { type: 'literal', value: '-30', prefix: 'http://www.w3.org/2001/XMLSchema#integer', line: 1 }, { type: ',', line: 1 }, { type: 'literal', value: '40', prefix: 'http://www.w3.org/2001/XMLSchema#integer', line: 1 }, { type: '.', line: 1 }, { type: 'eof', line: 1 })); it('should tokenize a decimal literal', shouldTokenize('1. 2.0, .3. -0.4, -.5. ', { type: 'literal', value: '1', prefix: 'http://www.w3.org/2001/XMLSchema#integer', line: 1 }, { type: '.', line: 1 }, { type: 'literal', value: '2.0', prefix: 'http://www.w3.org/2001/XMLSchema#decimal', line: 1 }, { type: ',', line: 1 }, { type: 'literal', value: '.3', prefix: 'http://www.w3.org/2001/XMLSchema#decimal', line: 1 }, { type: '.', line: 1 }, { type: 'literal', value: '-0.4', prefix: 'http://www.w3.org/2001/XMLSchema#decimal', line: 1 }, { type: ',', line: 1 }, { type: 'literal', value: '-.5', prefix: 'http://www.w3.org/2001/XMLSchema#decimal', line: 1 }, { type: '.', line: 1 }, { type: 'eof', line: 1 })); it('should tokenize a double literal', shouldTokenize('10e20, +30.40E+50. -60.70e-80. .171e-11.', { type: 'literal', value: '10e20', prefix: 'http://www.w3.org/2001/XMLSchema#double', line: 1 }, { type: ',', line: 1 }, { type: 'literal', value: '+30.40E+50', prefix: 'http://www.w3.org/2001/XMLSchema#double', line: 1 }, { type: '.', line: 1 }, { type: 'literal', value: '-60.70e-80', prefix: 'http://www.w3.org/2001/XMLSchema#double', line: 1 }, { type: '.', line: 1 }, { type: 'literal', value: '.171e-11', prefix: 'http://www.w3.org/2001/XMLSchema#double', line: 1 }, { type: '.', line: 1 }, { type: 'eof', line: 1 })); it('should not tokenize an invalid number', shouldNotTokenize('10-10 ', 'Unexpected "10-10" on line 1.')); it('should tokenize booleans', shouldTokenize('true false ', { type: 'literal', value: 'true', prefix: 'http://www.w3.org/2001/XMLSchema#boolean', line: 1 }, { type: 'literal', value: 'false', prefix: 'http://www.w3.org/2001/XMLSchema#boolean', line: 1 }, { type: 'eof', line: 1 })); it('should tokenize statements with shared subjects', shouldTokenize(' ;\n .', { type: 'IRI', value: 'a', line: 1 }, { type: 'IRI', value: 'b', line: 1 }, { type: 'IRI', value: 'c', line: 1 }, { type: ';', line: 1 }, { type: 'IRI', value: 'd', line: 2 }, { type: 'IRI', value: 'e', line: 2 }, { type: '.', line: 2 }, { type: 'eof', line: 2 })); it('should tokenize statements with shared subjects and predicates', shouldTokenize(' ,\n.', { type: 'IRI', value: 'a', line: 1 }, { type: 'IRI', value: 'b', line: 1 }, { type: 'IRI', value: 'c', line: 1 }, { type: ',', line: 1 }, { type: 'IRI', value: 'd', line: 2 }, { type: '.', line: 2 }, { type: 'eof', line: 2 })); it('should tokenize statements with shared subjects and predicates and prefixed names', shouldTokenize('a:a b:b c:c;d:d e:e,f:f.', { type: 'prefixed', prefix: 'a', value: 'a', line: 1 }, { type: 'prefixed', prefix: 'b', value: 'b', line: 1 }, { type: 'prefixed', prefix: 'c', value: 'c', line: 1 }, { type: ';', line: 1 }, { type: 'prefixed', prefix: 'd', value: 'd', line: 1 }, { type: 'prefixed', prefix: 'e', value: 'e', line: 1 }, { type: ',', line: 1 }, { type: 'prefixed', prefix: 'f', value: 'f', line: 1 }, { type: '.', line: 1 }, { type: 'eof', line: 1 })); it('should tokenize a stream', shouldTokenize(streamOf('\n ', '"""', 'c\n', '"""', '.', ' ', '""', '.', ' "i"', '@e', 'n.'), { type: 'IRI', value: 'a', line: 1 }, { type: 'IRI', value: 'b', line: 2 }, { type: 'literal', value: 'c\n', line: 2 }, { type: '.', line: 3 }, { type: 'IRI', value: 'd', line: 3 }, { type: 'IRI', value: 'e', line: 3 }, { type: 'literal', value: '', line: 3 }, { type: '.', line: 3 }, { type: 'IRI', value: 'g', line: 3 }, { type: 'IRI', value: 'h', line: 3 }, { type: 'literal', value: 'i', line: 3 }, { type: 'langcode', value: 'en', line: 3 }, { type: '.', line: 3 }, { type: 'eof', line: 3 })); it('should tokenize a stream ending with a digit and a dot', shouldTokenize(streamOf('1', '.'), { type: 'literal', value: '1', prefix: 'http://www.w3.org/2001/XMLSchema#integer', line: 1 }, { type: '.', line: 1 }, { type: 'eof', line: 1 })); it('should tokenize a stream containing a decimal without leading digit', shouldTokenize(streamOf('.', '1 '), { type: 'literal', value: '.1', prefix: 'http://www.w3.org/2001/XMLSchema#decimal', line: 1 }, { type: 'eof', line: 1 })); it('should tokenize a stream containing a decimal with leading digit', shouldTokenize(streamOf('1.', '1 '), { type: 'literal', value: '1.1', prefix: 'http://www.w3.org/2001/XMLSchema#decimal', line: 1 }, { type: 'eof', line: 1 })); it('should immediately signal an error if a linebreak occurs anywhere outside a triple-quoted literal', shouldNotTokenize(streamOf('abc\n', null), 'Unexpected "abc" on line 1.')); it('should immediately signal an error if a linebreak occurs inside a single-quoted literal', shouldNotTokenize(streamOf('"abc\n', null), 'Unexpected ""abc" on line 1.')); it('should immediately signal an error if a carriage return occurs anywhere outside a triple-quoted literal', shouldNotTokenize(streamOf('abc\r', null), 'Unexpected "abc" on line 1.')); it('should immediately signal an error if a carriage return occurs inside a single-quoted literal', shouldNotTokenize(streamOf('"abc\r', null), 'Unexpected ""abc" on line 1.')); it('should tokenize a split single-quoted string', shouldTokenize(streamOf("'abc", "def' "), { type: 'literal', value: 'abcdef', line: 1 }, { type: 'eof', line: 1 })); it('should tokenize a split single-quoted string followed by a triple-quoted string', // Checks whether _literalClosingPos is properly reset shouldTokenize(streamOf("'abcdef", "' '''a'''"), { type: 'literal', value: 'abcdef', line: 1 }, { type: 'literal', value: 'a', line: 1 }, { type: 'eof', line: 1 })); it('should tokenize split triple-quoted strings', shouldTokenize(streamOf('"', '""abc""" ', '""', '"def""" ', '"""', 'ghi""" ', '"""jkl', '""" ', '"""mno"', '"" ', '"""pqr""', '" '), { type: 'literal', value: 'abc', line: 1 }, { type: 'literal', value: 'def', line: 1 }, { type: 'literal', value: 'ghi', line: 1 }, { type: 'literal', value: 'jkl', line: 1 }, { type: 'literal', value: 'mno', line: 1 }, { type: 'literal', value: 'pqr', line: 1 }, { type: 'eof', line: 1 })); it('should tokenize a triple-quoted string split after a newline', shouldTokenize(streamOf('"""abc\n', 'def"""'), { type: 'literal', value: 'abc\ndef', line: 1 }, { type: 'eof', line: 2 })); it('should tokenize @ keywords', shouldTokenize('@prefix @base @forSome @forAll ', { type: '@prefix', line: 1 }, { type: '@base', line: 1 }, { type: '@forSome', line: 1 }, { type: '@forAll', line: 1 }, { type: 'eof', line: 1 })); it('should tokenize @prefix declarations', shouldTokenize('@prefix : .\n@prefix abc:.\n@prefix:.', { type: '@prefix', line: 1 }, { type: 'prefix', value: '', line: 1 }, { type: 'IRI', value: 'http://iri.org/#', line: 1 }, { type: '.', line: 1 }, { type: '@prefix', line: 2 }, { type: 'prefix', value: 'abc', line: 2 }, { type: 'IRI', value: 'http://iri.org/#', line: 2 }, { type: '.', line: 2 }, { type: '@prefix', line: 3 }, { type: 'prefix', value: '', line: 3 }, { type: 'IRI', value: 'http://example/c/', line: 3 }, { type: '.', line: 3 }, { type: 'eof', line: 3 })); it('should not tokenize prefixes that end with a dot', shouldNotTokenize('@prefix abc.: .', 'Unexpected "abc.:" on line 1.')); it('should tokenize @base declarations', shouldTokenize('@base .\n@base .', { type: '@base', line: 1 }, { type: 'IRI', value: 'http://iri.org/#', line: 1 }, { type: '.', line: 1 }, { type: '@base', line: 2 }, { type: 'IRI', value: 'http://iri.org/#', line: 2 }, { type: '.', line: 2 }, { type: 'eof', line: 2 })); it('should tokenize PREFIX declarations', shouldTokenize('PREFIX : \npreFiX abc: ', { type: 'PREFIX', line: 1 }, { type: 'prefix', value: '', line: 1 }, { type: 'IRI', value: 'http://iri.org/#', line: 1 }, { type: 'PREFIX', line: 2 }, { type: 'prefix', value: 'abc', line: 2 }, { type: 'IRI', value: 'http://iri.org/#', line: 2 }, { type: 'eof', line: 2 })); it('should tokenize BASE declarations', shouldTokenize('BASE \nbAsE ', { type: 'BASE', line: 1 }, { type: 'IRI', value: 'http://iri.org/#', line: 1 }, { type: 'BASE', line: 2 }, { type: 'IRI', value: 'http://iri.org/#', line: 2 }, { type: 'eof', line: 2 })); it('should tokenize blank nodes', shouldTokenize('[] [ ] [a:b "c"^^d:e][a:b[]] _:a:b.', { type: '[', line: 1 }, { type: ']', line: 1 }, { type: '[', line: 1 }, { type: 'IRI', value: 'a', line: 1 }, { type: 'IRI', value: 'b', line: 1 }, { type: ']', line: 1 }, { type: '[', line: 1 }, { type: 'prefixed', prefix: 'a', value: 'b', line: 1 }, { type: 'literal', value: 'c', line: 1 }, { type: 'type', prefix: 'd', value: 'e', line: 1 }, { type: ']', line: 1 }, { type: '[', line: 1 }, { type: 'prefixed', prefix: 'a', value: 'b', line: 1 }, { type: '[', line: 1 }, { type: ']', line: 1 }, { type: ']', line: 1 }, { type: 'blank', prefix: '_', value: 'a', line: 1 }, { type: 'prefixed', prefix: '', value: 'b', line: 1 }, { type: '.', line: 1 }, { type: 'eof', line: 1 })); it('should not tokenize invalid blank nodes', shouldNotTokenize('_::', 'Unexpected "_::" on line 1.')); it('should tokenize lists', shouldTokenize('() () ( )', { type: '(', line: 1 }, { type: ')', line: 1 }, { type: '(', line: 1 }, { type: 'IRI', value: 'a', line: 1 }, { type: ')', line: 1 }, { type: '(', line: 1 }, { type: 'IRI', value: 'a', line: 1 }, { type: 'IRI', value: 'b', line: 1 }, { type: ')', line: 1 }, { type: 'eof', line: 1 })); it('should tokenize mixed lists', shouldTokenize(' (1 "2" :o)(1()(1))', { type: 'IRI', value: 'a', line: 1 }, { type: 'IRI', value: 'b', line: 1 }, { type: '(', line: 1 }, { type: 'literal', value: '1', prefix: 'http://www.w3.org/2001/XMLSchema#integer', line: 1 }, { type: 'literal', value: '2', line: 1 }, { type: 'prefixed', value: 'o', line: 1 }, { type: ')', line: 1 }, { type: '(', line: 1 }, { type: 'literal', value: '1', prefix: 'http://www.w3.org/2001/XMLSchema#integer', line: 1 }, { type: '(', line: 1 }, { type: ')', line: 1 }, { type: '(', line: 1 }, { type: 'literal', value: '1', prefix: 'http://www.w3.org/2001/XMLSchema#integer', line: 1 }, { type: ')', line: 1 }, { type: ')', line: 1 }, { type: 'eof', line: 1 })); it('should tokenize the "a" predicate', shouldTokenize(' a .', { type: 'IRI', value: 'x', line: 1 }, { type: 'abbreviation', value: 'a', line: 1 }, { type: 'IRI', value: 'y', line: 1 }, { type: '.', line: 1 }, { type: 'eof', line: 1 })); it('should tokenize the "a" predicate without spacing', shouldTokenize('[a<>].\n[a[]].\n[a()].\n<>a<>.\n<>a[].\n<>a().\n', { type: '[', line: 1 }, { type: 'abbreviation', value: 'a', line: 1 }, { type: 'IRI', line: 1 }, { type: ']', line: 1 }, { type: '.', line: 1 }, { type: '[', line: 2 }, { type: 'abbreviation', value: 'a', line: 2 }, { type: '[', line: 2 }, { type: ']', line: 2 }, { type: ']', line: 2 }, { type: '.', line: 2 }, { type: '[', line: 3 }, { type: 'abbreviation', value: 'a', line: 3 }, { type: '(', line: 3 }, { type: ')', line: 3 }, { type: ']', line: 3 }, { type: '.', line: 3 }, { type: 'IRI', line: 4 }, { type: 'abbreviation', value: 'a', line: 4 }, { type: 'IRI', line: 4 }, { type: '.', line: 4 }, { type: 'IRI', line: 5 }, { type: 'abbreviation', value: 'a', line: 5 }, { type: '[', line: 5 }, { type: ']', line: 5 }, { type: '.', line: 5 }, { type: 'IRI', line: 6 }, { type: 'abbreviation', value: 'a', line: 6 }, { type: '(', line: 6 }, { type: ')', line: 6 }, { type: '.', line: 6 }, { type: 'eof', line: 7 })); it('should tokenize an empty default graph', shouldTokenize('{}', { type: '{', line: 1 }, { type: '}', line: 1 }, { type: 'eof', line: 1 })); it('should tokenize a non-empty default graph', shouldTokenize('{ c:d}', { type: '{', line: 1 }, { type: 'IRI', value: 'a', line: 1 }, { type: 'IRI', value: 'b', line: 1 }, { type: 'prefixed', prefix: 'c', value: 'd', line: 1 }, { type: '}', line: 1 }, { type: 'eof', line: 1 })); it('should tokenize an empty graph identified by an IRI', shouldTokenize('{}', { type: 'IRI', value: 'g', line: 1 }, { type: '{', line: 1 }, { type: '}', line: 1 }, { type: 'eof', line: 1 })); it('should tokenize a non-empty graph identified by an IRI', shouldTokenize(' { c:d}', { type: 'IRI', value: 'g', line: 1 }, { type: '{', line: 1 }, { type: 'IRI', value: 'a', line: 1 }, { type: 'IRI', value: 'b', line: 1 }, { type: 'prefixed', prefix: 'c', value: 'd', line: 1 }, { type: '}', line: 1 }, { type: 'eof', line: 1 })); it('should tokenize an empty graph identified by a blank node', shouldTokenize('_:g{}', { type: 'blank', prefix: '_', value: 'g', line: 1 }, { type: '{', line: 1 }, { type: '}', line: 1 }, { type: 'eof', line: 1 })); it('should tokenize a non-empty graph identified by a blank node', shouldTokenize('_:g { c:d}', { type: 'blank', prefix: '_', value: 'g', line: 1 }, { type: '{', line: 1 }, { type: 'IRI', value: 'a', line: 1 }, { type: 'IRI', value: 'b', line: 1 }, { type: 'prefixed', prefix: 'c', value: 'd', line: 1 }, { type: '}', line: 1 }, { type: 'eof', line: 1 })); it('should tokenize an empty graph with the GRAPH keyword', shouldTokenize('GRAPH{}', { type: 'GRAPH', line: 1 }, { type: 'IRI', value: 'g', line: 1 }, { type: '{', line: 1 }, { type: '}', line: 1 }, { type: 'eof', line: 1 })); it('should tokenize a non-empty graph with the GRAPH keyword', shouldTokenize('graph { c:d}', { type: 'GRAPH', line: 1 }, { type: 'IRI', value: 'g', line: 1 }, { type: '{', line: 1 }, { type: 'IRI', value: 'a', line: 1 }, { type: 'IRI', value: 'b', line: 1 }, { type: 'prefixed', prefix: 'c', value: 'd', line: 1 }, { type: '}', line: 1 }, { type: 'eof', line: 1 })); it('should tokenize variables', shouldTokenize('?a ?abc ?a_B_c.', { type: 'var', value: '?a', line: 1 }, { type: 'var', value: '?abc', line: 1 }, { type: 'var', value: '?a_B_c', line: 1 }, { type: '.', value: '', line: 1 }, { type: 'eof', line: 1 })); it('should not tokenize invalid variables', shouldNotTokenize('?0a ', 'Unexpected "?0a" on line 1.')); it('should tokenize the equality sign', shouldTokenize(' = ', { type: 'IRI', value: 'a', line: 1 }, { type: 'abbreviation', value: '=', line: 1 }, { type: 'IRI', value: 'b', line: 1 }, { type: 'eof', line: 1 })); it('should tokenize the right implication', shouldTokenize(' => ', { type: 'IRI', value: 'a', line: 1 }, { type: 'abbreviation', value: '>', line: 1 }, { type: 'IRI', value: 'b', line: 1 }, { type: 'eof', line: 1 })); it('should tokenize the left implication', shouldTokenize(' <= ', { type: 'IRI', value: 'a', line: 1 }, { type: 'inverse', value: '>', line: 1 }, { type: 'IRI', value: 'b', line: 1 }, { type: 'eof', line: 1 })); it('should tokenize a split left implication', shouldTokenize(streamOf(' <', '= '), { type: 'IRI', value: 'a', line: 1 }, { type: 'inverse', value: '>', line: 1 }, { type: 'IRI', value: 'b', line: 1 }, { type: 'eof', line: 1 })); it('should tokenize paths', shouldTokenize(':joe!fam:mother!loc:office!loc:zip :joe!fam:mother^fam:mother', { type: 'prefixed', prefix: '', value: 'joe', line: 1 }, { type: '!', line: 1 }, { type: 'prefixed', prefix: 'fam', value: 'mother', line: 1 }, { type: '!', line: 1 }, { type: 'prefixed', prefix: 'loc', value: 'office', line: 1 }, { type: '!', line: 1 }, { type: 'prefixed', prefix: 'loc', value: 'zip', line: 1 }, { type: 'prefixed', prefix: '', value: 'joe', line: 1 }, { type: '!', line: 1 }, { type: 'prefixed', prefix: 'fam', value: 'mother', line: 1 }, { type: '^', line: 1 }, { type: 'prefixed', prefix: 'fam', value: 'mother', line: 1 }, { type: 'eof', line: 1 })); it('should not tokenize an invalid document', shouldNotTokenize(' \n @!', 'Unexpected "@!" on line 2.')); it('does not call setEncoding if not available', () => { new Lexer().tokenize({ on: function () {} }); }); it('should tokenize an Quadterm start', shouldTokenize('<<', { type: '<<', line: 1 }, { type: 'eof', line: 1 })); it('should tokenize a split Quadterm start', shouldTokenize(streamOf('<', '<'), { type: '<<', line: 1 }, { type: 'eof', line: 1 })); it('should tokenize an Quadterm end', shouldTokenize('>>', { type: '>>', line: 1 }, { type: 'eof', line: 1 })); it('should tokenize an empty Quadterm', shouldTokenize('<< >>', { type: '<<', line: 1 }, { type: '>>', line: 1 }, { type: 'eof', line: 1 })); it('should tokenize an RDF* statement with IRIs', shouldTokenize('<< \n\t \n\t>> .', { type: '<<', line: 1 }, { type: 'IRI', value: 'http://ex.org/?bla#foo', line: 1 }, { type: 'IRI', value: 'http://ex.org/?bla#bar', line: 2 }, { type: 'IRI', value: 'http://ex.org/?bla#boo', line: 3 }, { type: '>>', line: 3 }, { type: '.', line: 3 }, { type: 'eof', line: 3 })); it('should not tokenize a wrongly closed RDF* statement with IRIs', shouldNotTokenize('<< \n\t \n\t> .', 'Unexpected ">" on line 3.')); it('should tokenize a split RDF* statement with IRIs', shouldTokenize(streamOf('<', '< \n\t \n\t>> .'), { type: '<<', line: 1 }, { type: 'IRI', value: 'http://ex.org/?bla#foo', line: 1 }, { type: 'IRI', value: 'http://ex.org/?bla#bar', line: 2 }, { type: 'IRI', value: 'http://ex.org/?bla#boo', line: 3 }, { type: '>>', line: 3 }, { type: '.', line: 3 }, { type: 'eof', line: 3 })); it('should tokenize an RDF* statement with string literals', shouldTokenize('<<"string"@en "string"@nl-be "string"@EN>> .', { type: '<<', line: 1 }, { type: 'literal', value: 'string', line: 1 }, { type: 'langcode', value: 'en', line: 1 }, { type: 'literal', value: 'string', line: 1 }, { type: 'langcode', value: 'nl-be', line: 1 }, { type: 'literal', value: 'string', line: 1 }, { type: 'langcode', value: 'EN', line: 1 }, { type: '>>', line: 1 }, { type: '.', line: 1 }, { type: 'eof', line: 1 })); it('should tokenize an RDF* statement with integers', shouldTokenize('<<1 2 3>>.', { type: '<<', line: 1 }, { type: 'literal', value: '1', prefix: 'http://www.w3.org/2001/XMLSchema#integer', line: 1 }, { type: 'literal', value: '2', prefix: 'http://www.w3.org/2001/XMLSchema#integer', line: 1 }, { type: 'literal', value: '3', prefix: 'http://www.w3.org/2001/XMLSchema#integer', line: 1 }, { type: '>>', line: 1 }, { type: '.', line: 1 }, { type: 'eof', line: 1 })); it('should tokenize an RDF* statement with decimals', shouldTokenize('<<1.2 3.4 5.6>>.', { type: '<<', line: 1 }, { type: 'literal', value: '1.2', prefix: 'http://www.w3.org/2001/XMLSchema#decimal', line: 1 }, { type: 'literal', value: '3.4', prefix: 'http://www.w3.org/2001/XMLSchema#decimal', line: 1 }, { type: 'literal', value: '5.6', prefix: 'http://www.w3.org/2001/XMLSchema#decimal', line: 1 }, { type: '>>', line: 1 }, { type: '.', line: 1 }, { type: 'eof', line: 1 })); it('should tokenize an RDF* statement with booleans', shouldTokenize('<>.', { type: '<<', line: 1 }, { type: 'literal', value: 'true', prefix: 'http://www.w3.org/2001/XMLSchema#boolean', line: 1 }, { type: 'literal', value: 'false', prefix: 'http://www.w3.org/2001/XMLSchema#boolean', line: 1 }, { type: 'literal', value: 'true', prefix: 'http://www.w3.org/2001/XMLSchema#boolean', line: 1 }, { type: '>>', line: 1 }, { type: '.', line: 1 }, { type: 'eof', line: 1 })); it('should tokenize a prefixed iri followed by the end of a QuadTerm', shouldTokenize('c:c>> .', { type: 'prefixed', prefix: 'c', value: 'c', line: 1 }, { type: '>>', line: 1 }, { type: '.', line: 1 }, { type: 'eof', line: 1 })); it('should tokenize an RDF* statement with prefixed names', shouldTokenize('<> .', { type: '<<', line: 1 }, { type: 'prefixed', prefix: 'a', value: 'a', line: 1 }, { type: 'prefixed', prefix: 'b', value: 'b', line: 1 }, { type: 'prefixed', prefix: 'c', value: 'c', line: 1 }, { type: '>>', line: 1 }, { type: '.', line: 1 }, { type: 'eof', line: 1 })); it('should tokenize an RDF* statement with blank nodes', shouldTokenize('<<_:a _:b _:c>> .', { type: '<<', line: 1 }, { type: 'blank', prefix: '_', value: 'a', line: 1 }, { type: 'blank', prefix: '_', value: 'b', line: 1 }, { type: 'blank', prefix: '_', value: 'c', line: 1 }, { type: '>>', line: 1 }, { type: '.', line: 1 }, { type: 'eof', line: 1 })); it('should tokenize an RDF* statement with variables', shouldTokenize('<> .', { type: '<<', line: 1 }, { type: 'var', value: '?a', line: 1 }, { type: 'var', value: '?b', line: 1 }, { type: 'var', value: '?c', line: 1 }, { type: '>>', line: 1 }, { type: '.', line: 1 }, { type: 'eof', line: 1 })); it('should tokenize an RDF* statement with mixed types', shouldTokenize('<< "string"@nl-be c:c>> .', { type: '<<', line: 1 }, { type: 'IRI', value: 'http://ex.org/?bla#foo', line: 1 }, { type: 'literal', value: 'string', line: 1 }, { type: 'langcode', value: 'nl-be', line: 1 }, { type: 'prefixed', prefix: 'c', value: 'c', line: 1 }, { type: '>>', line: 1 }, { type: '.', line: 1 }, { type: 'eof', line: 1 })); it('should tokenize an RDF* statement with mixed types', shouldTokenize('<<_:a a:a "string"@EN>> .', { type: '<<', line: 1 }, { type: 'blank', prefix: '_', value: 'a', line: 1 }, { type: 'prefixed', prefix: 'a', value: 'a', line: 1 }, { type: 'literal', value: 'string', line: 1 }, { type: 'langcode', value: 'EN', line: 1 }, { type: '>>', line: 1 }, { type: '.', line: 1 }, { type: 'eof', line: 1 })); it('should tokenize an RDF* statement with mixed types', shouldTokenize('<<"literal"@AU _:a>> .', { type: '<<', line: 1 }, { type: 'literal', value: 'literal', line: 1 }, { type: 'langcode', value: 'AU', line: 1 }, { type: 'IRI', value: 'http://ex.org/?bla#foo', line: 1 }, { type: 'blank', prefix: '_', value: 'a', line: 1 }, { type: '>>', line: 1 }, { type: '.', line: 1 }, { type: 'eof', line: 1 })); it('should tokenize RDF* statements with shared subjects', shouldTokenize('<< ;\n >>.', { type: '<<', line: 1 }, { type: 'IRI', value: 'a', line: 1 }, { type: 'IRI', value: 'b', line: 1 }, { type: 'IRI', value: 'c', line: 1 }, { type: ';', line: 1 }, { type: 'IRI', value: 'd', line: 2 }, { type: 'IRI', value: 'e', line: 2 }, { type: '>>', line: 2 }, { type: '.', line: 2 }, { type: 'eof', line: 2 })); it('should tokenize RDF* statements with shared subjects and predicates', shouldTokenize('<< ,\n>>.', { type: '<<', line: 1 }, { type: 'IRI', value: 'a', line: 1 }, { type: 'IRI', value: 'b', line: 1 }, { type: 'IRI', value: 'c', line: 1 }, { type: ',', line: 1 }, { type: 'IRI', value: 'd', line: 2 }, { type: '>>', line: 2 }, { type: '.', line: 2 }, { type: 'eof', line: 2 })); it('should tokenize an RDF* statement with shared subjects and predicates and prefixed names', shouldTokenize('<> .', { type: '<<', line: 1 }, { type: 'prefixed', prefix: 'a', value: 'a', line: 1 }, { type: 'prefixed', prefix: 'b', value: 'b', line: 1 }, { type: 'prefixed', prefix: 'c', value: 'c', line: 1 }, { type: ';', line: 1 }, { type: 'prefixed', prefix: 'd', value: 'd', line: 1 }, { type: 'prefixed', prefix: 'e', value: 'e', line: 1 }, { type: ',', line: 1 }, { type: 'prefixed', prefix: 'f', value: 'f', line: 1 }, { type: '>>', line: 1 }, { type: '.', line: 1 }, { type: 'eof', line: 1 })); it('should tokenize a QuadTerm followed by other tokens', shouldTokenize('<<_:a "lit"@EN>> _:a b:b.', { type: '<<', line: 1 }, { type: 'blank', prefix: '_', value: 'a', line: 1 }, { type: 'IRI', value: 'b', line: 1 }, { type: 'literal', value: 'lit', line: 1 }, { type: 'langcode', value: 'EN', line: 1 }, { type: '>>', line: 1 }, { type: 'blank', prefix: '_', value: 'a', line: 1 }, { type: 'prefixed', prefix: 'b', value: 'b', line: 1 }, { type: '.', line: 1 }, { type: 'eof', line: 1 })); it('should tokenize a QuadTerm preceded by other tokens', shouldTokenize('"lit"@DE _:b <<_:a b:b "lit"@EN>>.', { type: 'literal', value: 'lit', line: 1 }, { type: 'langcode', value: 'DE', line: 1 }, { type: 'blank', prefix: '_', value: 'b', line: 1 }, { type: '<<', line: 1 }, { type: 'blank', prefix: '_', value: 'a', line: 1 }, { type: 'prefixed', prefix: 'b', value: 'b', line: 1 }, { type: 'literal', value: 'lit', line: 1 }, { type: 'langcode', value: 'EN', line: 1 }, { type: '>>', line: 1 }, { type: '.', line: 1 }, { type: 'eof', line: 1 })); it('should tokenize a nested QuadTerm as subject in a statement', shouldTokenize('<<<<_:b "lit"@DE>> "lit"@EN>>.', { type: '<<', line: 1 }, { type: '<<', line: 1 }, { type: 'blank', prefix: '_', value: 'b', line: 1 }, { type: 'IRI', value: 'b', line: 1 }, { type: 'literal', value: 'lit', line: 1 }, { type: 'langcode', value: 'DE', line: 1 }, { type: '>>', line: 1 }, { type: 'IRI', value: 'a', line: 1 }, { type: 'literal', value: 'lit', line: 1 }, { type: 'langcode', value: 'EN', line: 1 }, { type: '>>', line: 1 }, { type: '.', line: 1 }, { type: 'eof', line: 1 })); it('should tokenize a nested QuadTerm as object in a statement', shouldTokenize('< "lit"@DE>>>>.', { type: '<<', line: 1 }, { type: 'prefixed', prefix: 'a', value: 'a', line: 1 }, { type: 'blank', prefix: '_', value: 'a', line: 1 }, { type: '<<', line: 1 }, { type: 'blank', prefix: '_', value: 'b', line: 1 }, { type: 'IRI', value: 'b', line: 1 }, { type: 'literal', value: 'lit', line: 1 }, { type: 'langcode', value: 'DE', line: 1 }, { type: '>>', line: 1 }, { type: '>>', line: 1 }, { type: '.', line: 1 }, { type: 'eof', line: 1 })); it('returns start and end index for every token', () => { const tokens = new Lexer().tokenize(' "lit"@EN.'); tokens.should.deep.equal([ { line: 1, prefix: '', type: 'IRI', value: 'a:a', start: 0, end: 6 }, { line: 1, prefix: '', type: 'IRI', value: 'b:c', start: 6, end: 12 }, { line: 1, prefix: '', type: 'literal', value: 'lit', start: 12, end: 17 }, { line: 1, prefix: '', type: 'langcode', value: 'EN', start: 17, end: 20 }, { line: 1, prefix: '', type: '.', value: '', start: 20, end: 21 }, { line: 1, prefix: '', type: 'eof', value: '', start: 21, end: 21 }, ]); }); it('returns start and end index relative to line', () => { const tokens = new Lexer().tokenize(' "lit"@EN ; \n .'); tokens.should.deep.equal([ { line: 1, prefix: '', type: 'IRI', value: 'a:a', start: 0, end: 6 }, { line: 1, prefix: '', type: 'IRI', value: 'b:c', start: 6, end: 12 }, { line: 1, prefix: '', type: 'literal', value: 'lit', start: 12, end: 17 }, { line: 1, prefix: '', type: 'langcode', value: 'EN', start: 17, end: 20 }, { line: 1, prefix: '', type: ';', value: '', start: 21, end: 22 }, { line: 2, prefix: '', type: 'IRI', value: 'b:d', start: 0, end: 6 }, { line: 2, prefix: '', type: 'IRI', value: 'd:e', start: 6, end: 12 }, { line: 2, prefix: '', type: '.', value: '', start: 12, end: 13 }, { line: 2, prefix: '', type: 'eof', value: '', start: 13, end: 13 }, ]); }); it('returns index including whitespaces', () => { const tokens = new Lexer().tokenize(' .'); tokens.should.deep.equal([ { line: 1, prefix: '', type: 'IRI', value: 'a:a', start: 0, end: 8 }, { line: 1, prefix: '', type: 'IRI', value: 'b:c', start: 8, end: 17 }, { line: 1, prefix: '', type: 'IRI', value: 'd:e', start: 17, end: 24 }, { line: 1, prefix: '', type: '.', value: '', start: 24, end: 25 }, { line: 1, prefix: '', type: 'eof', value: '', start: 25, end: 25 }, ]); }); it('returns index for comments and eof', () => { const tokens = new Lexer({ comments: true }).tokenize('# some\n . # trailing comment\n# thing'); tokens.should.deep.equal([ { line: 1, prefix: '', type: 'comment', value: ' some', start: 0, end: 7 }, { line: 2, prefix: '', type: 'IRI', value: 'a:a', start: 0, end: 6 }, { line: 2, prefix: '', type: 'IRI', value: 'b:b', start: 6, end: 12 }, { line: 2, prefix: '', type: 'IRI', value: 'c:c', start: 12, end: 18 }, { line: 2, prefix: '', type: '.', value: '', start: 18, end: 19 }, { line: 2, prefix: '', type: 'comment', value: ' trailing comment', start: 19, end: 39 }, { line: 3, prefix: '', type: 'comment', value: ' thing', start: 0, end: 7 }, { line: 3, prefix: '', type: 'eof', value: '', start: 7, end: 7 }, ]); }); describe('passing data after the stream has been finished', () => { const tokens = []; let error; before(() => { const stream = new EventEmitter(), lexer = new Lexer(); lexer.tokenize(stream, (err, token) => { if (err) error = err; else tokens.push(token); }); stream.emit('data', ' '); stream.emit('end'); stream.emit('data', ' '); stream.emit('end'); }); it('parses only the first chunk (plus EOF)', () => { tokens.should.have.length(2); }); it('does not emit an error', () => { expect(error).to.not.exist; }); }); describe('passing data after a syntax error', () => { const tokens = []; let error; before(() => { const stream = new EventEmitter(), lexer = new Lexer(); lexer.tokenize(stream, (err, token) => { if (err) error = err; else tokens.push(token); }); stream.emit('data', ' '); stream.emit('data', ' error '); stream.emit('end'); stream.emit('data', ' '); stream.emit('end'); }); it('parses only the first chunk', () => { tokens.should.have.length(1); }); it('emits the error', () => { expect(error).to.exist; expect(error).to.have.property('message', 'Unexpected "error" on line 1.'); }); }); describe('when the stream errors', () => { const tokens = []; let error; before(() => { const stream = new EventEmitter(), lexer = new Lexer(); lexer.tokenize(stream, (err, token) => { if (err) error = err; else tokens.push(token); }); stream.emit('error', new Error('my error')); }); it('passes the error', () => { expect(error).to.exist; expect(error).to.have.property('message', 'my error'); }); }); describe('called with a string and without callback', () => { const lexer = new Lexer(), tokens = lexer.tokenize(' .'); it('returns all tokens synchronously', () => { tokens.should.deep.equal([ { line: 1, type: 'IRI', value: 'a', prefix: '', start: 0, end: 4 }, { line: 1, type: 'IRI', value: 'b', prefix: '', start: 4, end: 8 }, { line: 1, type: 'IRI', value: 'c', prefix: '', start: 8, end: 11 }, { line: 1, type: '.', value: '', prefix: '', start: 11, end: 12 }, { line: 1, type: 'eof', value: '', prefix: '', start: 12, end: 12 }, ]); }); }); describe('called with an erroneous string and without callback', () => { const lexer = new Lexer(); it('throws an error', () => { (function () { lexer.tokenize(' bar'); }) .should.throw('Unexpected "bar" on line 1.'); }); }); }); }); describe('A Lexer instance with the n3 option set to false', () => { function createLexer() { return new Lexer({ n3: false }); } it('should not tokenize a variable', shouldNotTokenize(createLexer(), '?a', 'Unexpected "?a" on line 1.')); it('should not tokenize a right implication', shouldNotTokenize(createLexer(), ' => .', 'Unexpected "=>" on line 1.')); it('should not tokenize a left implication', shouldNotTokenize(createLexer(), ' <= .', 'Unexpected "<=" on line 1.')); it('should not tokenize an equality', shouldNotTokenize(createLexer(), ' = .', 'Unexpected "=" on line 1.')); it('should not tokenize a ! path', shouldNotTokenize(createLexer(), ':joe!fam:mother', 'Unexpected "!fam:mother" on line 1.')); it('should not tokenize a ^ path', shouldNotTokenize(createLexer(), ':joe^fam:father', 'Unexpected "^fam:father" on line 1.')); }); describe('A Lexer instance with the comment option set to true', () => { function createLexer() { return new Lexer({ comments: true }); } it('should tokenize a single comment', shouldTokenize(createLexer(), '#mycomment', { type: 'comment', value: 'mycomment', line: 1 }, { type: 'eof', line: 1 })); it('should tokenize a stream with split comment', shouldTokenize(createLexer(), streamOf('#mycom', 'ment'), { type: 'comment', value: 'mycomment', line: 1 }, { type: 'eof', line: 1 })); it('should tokenize comments', shouldTokenize(createLexer(), '<#foo> #mycomment\n <#foo> #mycomment \r# mycomment\n\n<#bla>#', { type: 'IRI', value: '#foo', line: 1 }, { type: 'comment', value: 'mycomment', line: 1 }, { type: 'IRI', value: '#foo', line: 2 }, { type: 'comment', value: 'mycomment ', line: 2 }, { type: 'comment', value: ' mycomment', line: 3 }, { type: 'IRI', value: '#bla', line: 5 }, { type: 'comment', value: '', line: 5 }, { type: 'eof', line: 5 })); }); function shouldTokenize(lexer, input) { const expected = Array.prototype.slice.call(arguments, 1); const ignoredAttributes = { start: true, end: true }; // Shift parameters as necessary if (lexer instanceof Lexer) expected.shift(); else input = lexer, lexer = new Lexer(); return function (done) { const result = []; lexer.tokenize(input, tokenCallback); function tokenCallback(error, token) { expect(error).not.to.exist; expect(token).to.exist; const expectedItem = expected[result.length]; if (expectedItem) for (const attribute in token) if (typeof expectedItem[attribute] === 'undefined' && (token[attribute] === '' || (ignoredAttributes[attribute]))) delete token[attribute]; result.push(token); if (token.type === 'eof') { result.should.eql(expected); done(null, result); } } }; } function shouldNotTokenize(lexer, input, expectedError) { // Shift parameters if necessary if (!(lexer instanceof Lexer)) expectedError = input, input = lexer, lexer = new Lexer(); return function (done) { lexer.tokenize(input, tokenCallback); function tokenCallback(error, token) { if (error) { expect(token).not.to.exist; error.should.be.an.instanceof(Error); error.message.should.eql(expectedError); done(); } else if (token.type === 'eof') throw new Error(`Expected error ${expectedError}`); } }; } function streamOf() { const elements = Array.prototype.slice.call(arguments), stream = new EventEmitter(); stream.setEncoding = function (encoding) { if (encoding === 'utf8') queueMicrotask(next); }; function next() { if (elements.length) { const element = elements.shift(); // use "null" to stall the stream if (element !== null) { stream.emit('data', element); queueMicrotask(next); } } else { stream.emit('end'); } } return stream; } N3.js-1.16.3/test/N3Parser-test.js000066400000000000000000003522041433366257500164500ustar00rootroot00000000000000import { Parser, NamedNode, BlankNode, Quad, termFromId } from '../src/'; const BASE_IRI = 'http://example.org/'; // Reset blank node identifiers between tests let blankId; beforeEach(() => { blankId = 0; // reset per-node ID Parser._resetBlankNodePrefix(); // reset per-parser ID }); Parser.prototype._blankNode = name => new BlankNode(name || `b${blankId++}`); describe('Parser', () => { describe('The Parser export', () => { it('should be a function', () => { Parser.should.be.a('function'); }); it('should be a Parser constructor', () => { new Parser().should.be.an.instanceof(Parser); }); }); describe('A Parser instance', () => { it('should parse the empty string', shouldParse('' /* no triples */)); it('should parse a whitespace string', shouldParse(' \t \n ' /* no triples */)); it('should parse a single triple', shouldParse(' .', ['a', 'b', 'c'])); it('should parse three triples', shouldParse(' .\n .\n .', ['a', 'b', 'c'], ['d', 'e', 'f'], ['g', 'h', 'i'])); it('should parse a triple with a literal', shouldParse(' "string".', ['a', 'b', '"string"'])); it('should parse a triple with a numeric literal', shouldParse(' 3.0.', ['a', 'b', '"3.0"^^http://www.w3.org/2001/XMLSchema#decimal'])); it('should parse a triple with an integer literal', shouldParse(' 3.', ['a', 'b', '"3"^^http://www.w3.org/2001/XMLSchema#integer'])); it('should parse a triple with a floating point literal', shouldParse(' 1.3e2.', ['a', 'b', '"1.3e2"^^http://www.w3.org/2001/XMLSchema#double'])); it('should parse a triple with a boolean literal', shouldParse(' true.', ['a', 'b', '"true"^^http://www.w3.org/2001/XMLSchema#boolean'])); it('should parse a triple with a literal and a language code', shouldParse(' "string"@en.', ['a', 'b', '"string"@en'])); it('should normalize language codes to lowercase', shouldParse(' "string"@EN.', ['a', 'b', '"string"@en'])); it('should parse a triple with a literal and an IRI type', shouldParse(' "string"^^.', ['a', 'b', '"string"^^http://example.org/type'])); it('should parse a triple with a literal and a prefixed name type', shouldParse('@prefix x: . "string"^^x:z.', ['a', 'b', '"string"^^urn:x:y#z'])); it('should differentiate between IRI and prefixed name types', shouldParse('@prefix : . :a :b "x"^^. :a :b "x"^^:urn:foo.', ['noturn:a', 'noturn:b', '"x"^^urn:foo'], ['noturn:a', 'noturn:b', '"x"^^noturn:urn:foo'])); it('should not parse a triple with a literal and a prefixed name type with an inexistent prefix', shouldNotParse(' "string"^^x:z.', 'Undefined prefix "x:" on line 1.', { token: { line: 1, type: 'type', value: 'z', prefix: 'x', start: 18, end: 21, }, line: 1, previousToken: { line: 1, type: 'literal', value: 'string', prefix: '', start: 8, end: 16, }, })); it('should parse a triple with the "a" shorthand predicate', shouldParse(' a .', ['a', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type', 't'])); it('should parse triples with prefixes', shouldParse('@prefix : <#>.\n' + '@prefix a: .\n' + ':x a:a a:b.', ['#x', 'a#a', 'a#b'])); it('should parse triples with the prefix "prefix"', shouldParse('@prefix prefix: .' + 'prefix:a prefix:b prefix:c.', ['http://prefix.cc/a', 'http://prefix.cc/b', 'http://prefix.cc/c'])); it('should parse triples with the prefix "base"', shouldParse('PREFIX base: ' + 'base:a base:b base:c.', ['http://prefix.cc/a', 'http://prefix.cc/b', 'http://prefix.cc/c'])); it('should parse triples with the prefix "graph"', shouldParse('PREFIX graph: ' + 'graph:a graph:b graph:c.', ['http://prefix.cc/a', 'http://prefix.cc/b', 'http://prefix.cc/c'])); it('should not parse @PREFIX', shouldNotParse('@PREFIX : <#>.', 'Expected entity but got @PREFIX on line 1.', { token: { line: 1, type: '@PREFIX', value: '', prefix: '', start: 0, end: 7, }, previousToken: undefined, line: 1, })); it('should parse triples with prefixes and different punctuation', shouldParse('@prefix : <#>.\n' + '@prefix a: .\n' + ':x a:a a:b;a:c a:d,a:e.', ['#x', 'a#a', 'a#b'], ['#x', 'a#c', 'a#d'], ['#x', 'a#c', 'a#e'])); it('should not parse undefined empty prefix in subject', shouldNotParse(':a ', 'Undefined prefix ":" on line 1.')); it('should not parse undefined prefix in subject', shouldNotParse('a:a ', 'Undefined prefix "a:" on line 1.')); it('should not parse undefined prefix in predicate', shouldNotParse(' b:c ', 'Undefined prefix "b:" on line 1.')); it('should not parse undefined prefix in object', shouldNotParse(' c:d ', 'Undefined prefix "c:" on line 1.')); it('should not parse undefined prefix in datatype', shouldNotParse(' "c"^^d:e ', 'Undefined prefix "d:" on line 1.')); it('should parse triples with SPARQL prefixes', shouldParse('PREFIX : <#>\n' + 'PrEfIX a: ' + ':x a:a a:b.', ['#x', 'a#a', 'a#b'])); it('should not parse prefix declarations without prefix', shouldNotParse('@prefix ', 'Expected prefix to follow @prefix on line 1.')); it('should not parse prefix declarations without IRI', shouldNotParse('@prefix : .', 'Expected IRI to follow prefix ":" on line 1.')); it('should not parse prefix declarations without a dot', shouldNotParse('@prefix : ;', 'Expected declaration to end with a dot on line 1.')); it('should parse statements with shared subjects', shouldParse(' ;\n .', ['a', 'b', 'c'], ['a', 'd', 'e'])); it('should parse statements with shared subjects and trailing semicolon', shouldParse(' ;\n ;\n.', ['a', 'b', 'c'], ['a', 'd', 'e'])); it('should parse statements with shared subjects and multiple semicolons', shouldParse(' ;;\n .', ['a', 'b', 'c'], ['a', 'd', 'e'])); it('should parse statements with shared subjects and predicates', shouldParse(' , .', ['a', 'b', 'c'], ['a', 'b', 'd'])); it('should not accept ; without preceding predicate', shouldNotParse(' . ; .', 'Expected predicate but got ; on line 1.')); it('should not accept , without preceding object', shouldNotParse(' . , .', 'Expected entity but got , on line 1.')); it('should parse diamonds', shouldParse('<> <> <> <>.\n(<>) <> (<>) <>.', [BASE_IRI, BASE_IRI, BASE_IRI, BASE_IRI], ['_:b0', BASE_IRI, '_:b1', BASE_IRI], ['_:b0', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#first', BASE_IRI], ['_:b0', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#rest', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#nil'], ['_:b1', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#first', BASE_IRI], ['_:b1', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#rest', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#nil'])); it('should parse statements with named blank nodes', shouldParse('_:a _:c.', ['_:b0_a', 'b', '_:b0_c'])); it('should not parse statements with a blank node as predicate', shouldNotParse('PREFIX : <#>\n [] .', 'Disallowed blank node as predicate on line 2.', { token: { line: 2, type: '[', value: '', prefix: '', start: 4, end: 5, }, line: 2, previousToken: { line: 2, type: 'IRI', value: 'a', prefix: '', start: 0, end: 4, }, })); it('should not parse statements with a blank node label as predicate', shouldNotParse('PREFIX : <#>\n _:b .', 'Disallowed blank node as predicate on line 2.', { token: { line: 2, type: 'blank', value: 'b', prefix: '_', start: 4, end: 8, }, line: 2, previousToken: { line: 2, type: 'IRI', value: 'a', prefix: '', start: 0, end: 4, }, })); it('should parse statements with empty blank nodes', shouldParse('[] [].', ['_:b0', 'b', '_:b1'])); it('should parse statements with unnamed blank nodes in the subject', shouldParse('[ ] .', ['_:b0', 'c', 'd'], ['_:b0', 'a', 'b'])); it('should parse statements with unnamed blank nodes in the object', shouldParse(' [ ].', ['a', 'b', '_:b0'], ['_:b0', 'c', 'd'])); it('should parse statements with unnamed blank nodes with a string object', shouldParse(' [ "x"].', ['a', 'b', '_:b0'], ['_:b0', 'c', '"x"'])); it('should not parse a blank node with missing subject', shouldNotParse(' [].', 'Expected entity but got ] on line 1.')); it('should not parse a blank node with only a semicolon', shouldNotParse(' [;].', 'Expected predicate but got ; on line 1.')); it('should not parse a dangling blank node closing brace', shouldNotParse(' ; ]', 'Unexpected ] on line 1.')); it('should parse a blank node with a trailing semicolon', shouldParse(' [ ; ].', ['a', 'b', '_:b0'], ['_:b0', 'u', 'v'])); it('should parse a blank node with multiple trailing semicolons', shouldParse(' [ ;;; ].', ['a', 'b', '_:b0'], ['_:b0', 'u', 'v'])); it('should parse a multi-predicate blank node', shouldParse(' [ ; ].', ['a', 'b', '_:b0'], ['_:b0', 'u', 'v'], ['_:b0', 'w', 'z'])); it('should parse a multi-predicate blank node with multiple semicolons', shouldParse(' [ ;;; ].', ['a', 'b', '_:b0'], ['_:b0', 'u', 'v'], ['_:b0', 'w', 'z'])); it('should parse a multi-object blank node', shouldParse(' [ , ].', ['a', 'b', '_:b0'], ['_:b0', 'u', 'v'], ['_:b0', 'u', 'z'])); it('should parse a multi-statement blank node ending with a literal', shouldParse(' [ ; "z" ].', ['a', 'b', '_:b0'], ['_:b0', 'u', 'v'], ['_:b0', 'w', '"z"'])); it('should parse a multi-statement blank node ending with a typed literal', shouldParse(' [ ; "z"^^ ].', ['a', 'b', '_:b0'], ['_:b0', 'u', 'v'], ['_:b0', 'w', '"z"^^http://example.org/t'])); it('should parse a multi-statement blank node ending with a string with language', shouldParse(' [ ; "z"^^ ].', ['a', 'b', '_:b0'], ['_:b0', 'u', 'v'], ['_:b0', 'w', '"z"^^http://example.org/t'])); it('should parse a multi-statement blank node with trailing semicolon', shouldParse(' [ ; ; ].', ['a', 'b', '_:b0'], ['_:b0', 'u', 'v'], ['_:b0', 'w', 'z'])); it('should parse statements with nested blank nodes in the subject', shouldParse('[ [ ]] .', ['_:b0', 'c', 'd'], ['_:b0', 'a', '_:b1'], ['_:b1', 'x', 'y'])); it('should parse statements with nested blank nodes in the object', shouldParse(' [ [ ]].', ['a', 'b', '_:b0'], ['_:b0', 'c', '_:b1'], ['_:b1', 'd', 'e'])); it('should reuse identifiers of blank nodes within and outside of graphs', shouldParse('_:a _:c. { _:a _:c }', ['_:b0_a', 'b', '_:b0_c'], ['_:b0_a', 'b', '_:b0_c', 'g'])); it('should not parse an invalid blank node', shouldNotParse('[ .', 'Expected punctuation to follow "http://example.org/b" on line 1.')); it('should parse a statements with only an anonymous node', shouldParse('[

].', ['_:b0', 'p', 'o'])); it('should not parse a statement with only a blank anonymous node', shouldNotParse('[].', 'Unexpected . on line 1.')); it('should not parse an anonymous node with only an anonymous node inside', shouldNotParse('[[

]].', 'Disallowed blank node as predicate on line 1.')); it('should parse statements with an empty list in the subject', shouldParse('() .', ['http://www.w3.org/1999/02/22-rdf-syntax-ns#nil', 'a', 'b'])); it('should parse statements with an empty list in the object', shouldParse(' ().', ['a', 'b', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#nil'])); it('should parse statements with a single-element list in the subject', shouldParse('() .', ['_:b0', 'a', 'b'], ['_:b0', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#first', 'x'], ['_:b0', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#rest', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#nil'])); it('should parse statements with a single-element list in the object', shouldParse(' ().', ['a', 'b', '_:b0'], ['_:b0', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#first', 'x'], ['_:b0', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#rest', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#nil'])); it('should parse a list with a literal', shouldParse(' ("x").', ['a', 'b', '_:b0'], ['_:b0', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#first', '"x"'], ['_:b0', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#rest', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#nil'])); it('should parse a list with a typed literal', shouldParse(' ("x"^^).', ['a', 'b', '_:b0'], ['_:b0', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#first', '"x"^^http://example.org/y'], ['_:b0', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#rest', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#nil'])); it('should parse a list with a language-tagged literal', shouldParse(' ("x"@en-GB).', ['a', 'b', '_:b0'], ['_:b0', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#first', '"x"@en-gb'], ['_:b0', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#rest', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#nil'])); it('should parse statements with a multi-element list in the subject', shouldParse('( ) .', ['_:b0', 'a', 'b'], ['_:b0', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#first', 'x'], ['_:b0', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#rest', '_:b1'], ['_:b1', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#first', 'y'], ['_:b1', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#rest', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#nil'])); it('should parse statements with a multi-element list in the object', shouldParse(' ( ).', ['a', 'b', '_:b0'], ['_:b0', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#first', 'x'], ['_:b0', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#rest', '_:b1'], ['_:b1', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#first', 'y'], ['_:b1', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#rest', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#nil'])); it('should parse statements with a multi-element literal list in the object', shouldParse(' ("x" "y"@en-GB 1 "z"^^).', ['a', 'b', '_:b0'], ['_:b0', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#first', '"x"'], ['_:b0', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#rest', '_:b1'], ['_:b1', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#first', '"y"@en-gb'], ['_:b1', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#rest', '_:b2'], ['_:b2', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#first', '"1"^^http://www.w3.org/2001/XMLSchema#integer'], ['_:b2', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#rest', '_:b3'], ['_:b3', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#first', '"z"^^http://example.org/t'], ['_:b3', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#rest', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#nil'])); it('should parse statements with prefixed names in lists', shouldParse('@prefix a: . (a:x a:y).', ['a', 'b', '_:b0'], ['_:b0', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#first', 'a#x'], ['_:b0', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#rest', '_:b1'], ['_:b1', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#first', 'a#y'], ['_:b1', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#rest', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#nil'])); it('should not parse statements with undefined prefixes in lists', shouldNotParse(' (a:x a:y).', 'Undefined prefix "a:" on line 1.')); it('should parse statements with blank nodes in lists', shouldParse(' (_:x _:y).', ['a', 'b', '_:b0'], ['_:b0', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#first', '_:b0_x'], ['_:b0', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#rest', '_:b1'], ['_:b1', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#first', '_:b0_y'], ['_:b1', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#rest', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#nil'])); it('should parse statements with a nested empty list', shouldParse(' ( ()).', ['a', 'b', '_:b0'], ['_:b0', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#first', 'x'], ['_:b0', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#rest', '_:b1'], ['_:b1', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#first', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#nil'], ['_:b1', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#rest', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#nil'])); it('should parse statements with non-empty nested lists', shouldParse(' ( ()).', ['a', 'b', '_:b0'], ['_:b0', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#first', 'x'], ['_:b0', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#rest', '_:b1'], ['_:b1', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#first', '_:b2'], ['_:b1', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#rest', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#nil'], ['_:b2', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#first', 'y'], ['_:b2', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#rest', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#nil'])); it('should parse statements with a list containing a blank node', shouldParse('([]) .', ['_:b0', 'a', 'b'], ['_:b0', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#first', '_:b1'], ['_:b0', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#rest', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#nil'])); it('should parse statements with a list containing multiple blank nodes', shouldParse('([] [ ]) .', ['_:b0', 'a', 'b'], ['_:b0', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#first', '_:b1'], ['_:b0', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#rest', '_:b2'], ['_:b2', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#first', '_:b3'], ['_:b2', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#rest', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#nil'], ['_:b3', 'x', 'y'])); it('should parse statements with a blank node containing a list', shouldParse('[ ()] .', ['_:b0', 'c', 'd'], ['_:b0', 'a', '_:b1'], ['_:b1', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#first', 'b'], ['_:b1', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#rest', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#nil'])); it('should not parse an invalid list', shouldNotParse(' (]).', 'Expected entity but got ] on line 1.')); it('should resolve IRIs against @base', shouldParse('@base .\n' + ' .\n' + '@base .\n' + ' .', ['http://ex.org/a', 'http://ex.org/b', 'http://ex.org/c'], ['http://ex.org/d/e', 'http://ex.org/d/f', 'http://ex.org/d/g'])); it('should not resolve IRIs against @BASE', shouldNotParse('@BASE .', 'Expected entity but got @BASE on line 1.')); it('should resolve IRIs against SPARQL base', shouldParse('BASE \n' + ' . ' + 'BASE ' + ' .', ['http://ex.org/a', 'http://ex.org/b', 'http://ex.org/c'], ['http://ex.org/d/e', 'http://ex.org/d/f', 'http://ex.org/d/g'])); it('should resolve IRIs against a @base with query string', shouldParse('@base .\n' + '<> .\n' + '@base .\n' + '<> .', ['http://ex.org/?foo', 'http://ex.org/b', 'http://ex.org/c'], ['http://ex.org/d/?bar', 'http://ex.org/d/f', 'http://ex.org/d/g'])); it('should resolve IRIs with query string against @base', shouldParse('@base .\n' + ' .\n' + '@base .\n' + ' .' + '@base .\n' + '<> .', ['http://ex.org/?', 'http://ex.org/?a', 'http://ex.org/?a=b'], ['http://ex.org/d?', 'http://ex.org/d?a', 'http://ex.org/d?a=b'], ['http://ex.org/d?e', 'http://ex.org/d?a', 'http://ex.org/d?a=b'])); it('should not resolve IRIs with colons', shouldParse('@base .\n' + ' .\n' + ' .\n' + ' .', ['http://ex.org/a', 'http://ex.org/b', 'http://ex.org/c'], ['A:', 'b:', 'c:'], ['a:a', 'b:B', 'C-D:c'])); it('should not allow relative URIs with a colon in the first path segment', shouldNotParse(' .', 'Invalid IRI on line 1.')); it('should not allow relative URIs with a colon in the first path segment as base', shouldNotParse('@base .', 'Expected valid IRI to follow base declaration on line 1.')); it('should resolve datatype IRIs against @base', shouldParse('@base .\n' + ' "c"^^.\n' + '@base .\n' + ' "g"^^.', ['http://ex.org/a', 'http://ex.org/b', '"c"^^http://ex.org/d'], ['http://ex.org/d/e', 'http://ex.org/d/f', '"g"^^http://ex.org/d/h'])); it('should resolve IRIs against a base with a fragment', shouldParse('@base .\n' + ' <#c>.\n', ['http://ex.org/a', 'http://ex.org/b', 'http://ex.org/foo#c'])); it('should resolve IRIs with an empty fragment', shouldParse('@base .\n' + '<#> <#c>.\n', ['http://ex.org/foo#', 'http://ex.org/b#', 'http://ex.org/foo#c'])); it('should not resolve prefixed names', shouldParse('PREFIX ex: \n' + 'ex:a ex:b ex:c .', ['http://ex.org/a/bb/ccc/../a', 'http://ex.org/a/bb/ccc/../b', 'http://ex.org/a/bb/ccc/../c'])); it('should parse an empty default graph', shouldParse('{}')); it('should parse a one-triple default graph ending without a dot', shouldParse('{ }', ['a', 'b', 'c'])); it('should parse a one-triple default graph ending with a dot', shouldParse('{ .}', ['a', 'b', 'c'])); it('should parse a three-triple default graph ending without a dot', shouldParse('{ ; ,}', ['a', 'b', 'c'], ['a', 'd', 'e'], ['a', 'd', 'f'])); it('should parse a three-triple default graph ending with a dot', shouldParse('{ ; ,.}', ['a', 'b', 'c'], ['a', 'd', 'e'], ['a', 'd', 'f'])); it('should parse a three-triple default graph ending with a semicolon', shouldParse('{ ; ,;}', ['a', 'b', 'c'], ['a', 'd', 'e'], ['a', 'd', 'f'])); it('should parse a default graph with a blank node ending with a dot', shouldParse('{ [

]. }', ['_:b0', 'p', 'o'])); it('should parse a default graph with a blank node ending without a dot', shouldParse('{ [

] }', ['_:b0', 'p', 'o'])); it('should parse an empty named graph with an IRI', shouldParse('{}')); it('should parse a one-triple named graph with an IRI ending without a dot', shouldParse(' { }', ['a', 'b', 'c', 'g'])); it('should parse a one-triple named graph with an IRI ending with a dot', shouldParse('{ .}', ['a', 'b', 'c', 'g'])); it('should parse a three-triple named graph with an IRI ending without a dot', shouldParse(' { ; ,}', ['a', 'b', 'c', 'g'], ['a', 'd', 'e', 'g'], ['a', 'd', 'f', 'g'])); it('should parse a three-triple named graph with an IRI ending with a dot', shouldParse('{ ; ,.}', ['a', 'b', 'c', 'g'], ['a', 'd', 'e', 'g'], ['a', 'd', 'f', 'g'])); it('should parse an empty named graph with a prefixed name', shouldParse('@prefix g: .\ng:h {}')); it('should parse a one-triple named graph with a prefixed name ending without a dot', shouldParse('@prefix g: .\ng:h { }', ['a', 'b', 'c', 'g#h'])); it('should parse a one-triple named graph with a prefixed name ending with a dot', shouldParse('@prefix g: .\ng:h{ .}', ['a', 'b', 'c', 'g#h'])); it('should parse a three-triple named graph with a prefixed name ending without a dot', shouldParse('@prefix g: .\ng:h { ; ,}', ['a', 'b', 'c', 'g#h'], ['a', 'd', 'e', 'g#h'], ['a', 'd', 'f', 'g#h'])); it('should parse a three-triple named graph with a prefixed name ending with a dot', shouldParse('@prefix g: .\ng:h{ ; ,.}', ['a', 'b', 'c', 'g#h'], ['a', 'd', 'e', 'g#h'], ['a', 'd', 'f', 'g#h'])); it('should parse a named graph with a blank node ending with a dot', shouldParse(' { [

]. }', ['_:b0', 'p', 'o', 'g'])); it('should parse a named graph with a blank node ending without a dot', shouldParse(' { [

] }', ['_:b0', 'p', 'o', 'g'])); it('should parse an empty anonymous graph', shouldParse('[] {}')); it('should parse a one-triple anonymous graph ending without a dot', shouldParse('[] { }', ['a', 'b', 'c', '_:b0'])); it('should parse a one-triple anonymous graph ending with a dot', shouldParse('[]{ .}', ['a', 'b', 'c', '_:b0'])); it('should parse a three-triple anonymous graph ending without a dot', shouldParse('[] { ; ,}', ['a', 'b', 'c', '_:b0'], ['a', 'd', 'e', '_:b0'], ['a', 'd', 'f', '_:b0'])); it('should parse a three-triple anonymous graph ending with a dot', shouldParse('[]{ ; ,.}', ['a', 'b', 'c', '_:b0'], ['a', 'd', 'e', '_:b0'], ['a', 'd', 'f', '_:b0'])); it('should parse an empty named graph with an IRI and the GRAPH keyword', shouldParse('GRAPH {}')); it('should parse an empty named graph with a prefixed name and the GRAPH keyword', shouldParse('@prefix g: .\nGRAPH g:h {}')); it('should parse an empty anonymous graph and the GRAPH keyword', shouldParse('GRAPH [] {}')); it('should parse a one-triple named graph with an IRI and the GRAPH keyword', shouldParse('GRAPH { }', ['a', 'b', 'c', 'g'])); it('should parse a one-triple named graph with a prefixed name and the GRAPH keyword', shouldParse('@prefix g: .\nGRAPH g:h { }', ['a', 'b', 'c', 'g#h'])); it('should parse a one-triple anonymous graph and the GRAPH keyword', shouldParse('GRAPH [] { }', ['a', 'b', 'c', '_:b0'])); it('should parse a graph with 8-bit unicode escape sequences', shouldParse('<\\U0001d400> {\n<\\U0001d400> <\\U0001d400> "\\U0001d400"^^<\\U0001d400>\n}\n', ['\ud835\udC00', '\ud835\udc00', '"\ud835\udc00"^^http://example.org/\ud835\udc00', '\ud835\udc00'])); it('should not parse a single closing brace', shouldNotParse('}', 'Unexpected graph closing on line 1.')); it('should not parse a single opening brace', shouldNotParse('{', 'Expected entity but got eof on line 1.')); it('should not parse a superfluous closing brace ', shouldNotParse('{}}', 'Unexpected graph closing on line 1.')); it('should not parse a graph with only a dot', shouldNotParse('{.}', 'Expected entity but got . on line 1.')); it('should not parse a graph with only a semicolon', shouldNotParse('{;}', 'Expected entity but got ; on line 1.')); it('should not parse an unclosed graph', shouldNotParse('{ .', 'Unclosed graph on line 1.')); it('should not parse a named graph with a list node as label', shouldNotParse('() {}', 'Expected entity but got { on line 1.')); it('should not parse a named graph with a non-empty blank node as label', shouldNotParse('[ ] {}', 'Expected entity but got { on line 1.')); it('should not parse a named graph with the GRAPH keyword and a non-empty blank node as label', shouldNotParse('GRAPH [ ] {}', 'Invalid graph label on line 1.')); it('should not parse a triple after the GRAPH keyword', shouldNotParse('GRAPH .', 'Expected graph but got IRI on line 1.')); it('should not parse repeated GRAPH keywords', shouldNotParse('GRAPH GRAPH {}', 'Invalid graph label on line 1.')); it('should parse a quad with 4 IRIs', shouldParse(' .', ['a', 'b', 'c', 'g'])); it('should parse a quad with 4 prefixed names', shouldParse('@prefix p: .\np:a p:b p:c p:g.', ['p#a', 'p#b', 'p#c', 'p#g'])); it('should not parse a quad with an undefined prefix', shouldNotParse(' p:g.', 'Undefined prefix "p:" on line 1.')); it('should parse a quad with 3 IRIs and a literal', shouldParse(' "c"^^ .', ['a', 'b', '"c"^^http://example.org/d', 'g'])); it('should parse a quad with 2 blank nodes and a literal', shouldParse('_:a "c"^^ _:g.', ['_:b0_a', 'b', '"c"^^http://example.org/d', '_:b0_g'])); it('should not parse a quad in a graph', shouldNotParse('{ .}', 'Expected punctuation to follow "http://example.org/c" on line 1.')); it('should not parse a quad with different punctuation', shouldNotParse(' ;', 'Expected dot to follow quad on line 1.')); it('should not parse base declarations without IRI', shouldNotParse('@base a: ', 'Expected valid IRI to follow base declaration on line 1.')); it('should not parse improperly nested parentheses and brackets', shouldNotParse(' [ (]).', 'Expected entity but got ] on line 1.')); it('should not parse improperly nested square brackets', shouldNotParse(' [ ]].', 'Expected entity but got ] on line 1.')); it('should error when an object is not there', shouldNotParse(' .', 'Expected entity but got . on line 1.')); it('should error when a dot is not there', shouldNotParse(' ', 'Expected entity but got eof on line 1.')); it('should error with an abbreviation in the subject', shouldNotParse('a .', 'Expected entity but got abbreviation on line 1.')); it('should error with an abbreviation in the object', shouldNotParse(' a .', 'Expected entity but got abbreviation on line 1.')); it('should error if punctuation follows a subject', shouldNotParse(' .', 'Unexpected . on line 1.')); it('should error if an unexpected token follows a subject', shouldNotParse(' @', 'Unexpected "@" on line 1.'), { token: { line: 1, type: '@PREFIX', value: '', prefix: '', }, previousToken: undefined, line: 1, }); it('should not error if there is no triple callback', () => { new Parser().parse(''); }); it('should return prefixes through a callback', done => { const prefixes = {}; new Parser().parse('@prefix a: . a:a a:b a:c. @prefix b: .', tripleCallback, prefixCallback); function tripleCallback(error, triple) { expect(error).not.to.exist; if (!triple) { Object.keys(prefixes).should.have.length(2); expect(prefixes).to.have.property('a'); expect(prefixes.a).to.deep.equal(new NamedNode('http://a.org/#')); expect(prefixes).to.have.property('b'); expect(prefixes.b).to.deep.equal(new NamedNode('http://b.org/#')); done(); } } function prefixCallback(prefix, iri) { expect(prefix).to.exist; expect(iri).to.exist; prefixes[prefix] = iri; } }); it('should return prefixes through a callback without triple callback', done => { const prefixes = {}; new Parser().parse('@prefix a: . a:a a:b a:c. @prefix b: .', null, prefixCallback); function prefixCallback(prefix, iri) { expect(prefix).to.exist; expect(iri).to.exist; prefixes[prefix] = iri; if (Object.keys(prefixes).length === 2) done(); } }); it('should return prefixes at the last triple callback', done => { new Parser({ baseIRI: BASE_IRI }) .parse('@prefix a: . a:a a:b a:c. @prefix b: .', tripleCallback); function tripleCallback(error, triple, prefixes) { expect(error).not.to.exist; if (triple) expect(prefixes).not.to.exist; else { expect(prefixes).to.exist; Object.keys(prefixes).should.have.length(2); expect(prefixes).to.have.property('a', 'http://example.org/IRIa'); expect(prefixes).to.have.property('b', 'http://example.org/IRIb'); done(); } } }); it('should parse a string synchronously if no callback is given', () => { const triples = new Parser().parse('@prefix a: . a:a a:b a:c.'); triples.should.deep.equal([ new Quad(termFromId('urn:a:a'), termFromId('urn:a:b'), termFromId('urn:a:c'), termFromId('')), ]); }); it('should throw on syntax errors if no callback is given', () => { (function () { new Parser().parse(' bar '); }) .should.throw('Unexpected "bar" on line 1.').with.property('context').with.property('line', 1); }); it('should throw on grammar errors if no callback is given', () => { (function () { new Parser().parse(' '); }) .should.throw('Expected entity but got eof on line 1'); }); it('should parse an RDF* triple with a triple with iris as subject correctly', () => { shouldParse('<< >> .', [['a', 'b', 'c'], 'b', 'c']); }); it('should not parse an RDF* triple with a triple as predicate', shouldNotParse(' << >> ', 'Expected entity but got << on line 1.')); it('should parse an RDF* triple with a triple with blanknodes as subject correctly', shouldParse('<<_:a _:c>> .', [['_:b0_a', 'b', '_:b0_c'], 'b', 'c'])); it('should parse an RDF* triple with a triple with blanknodes and literals as subject correctly', shouldParse('<<_:a "c"^^>> .', [['_:b0_a', 'b', '"c"^^http://example.org/d'], 'b', 'c'])); it('should parse an RDF* triple with a triple as object correctly', shouldParse(' << >>.', ['a', 'b', ['a', 'b', 'c']])); it('should parse an RDF* triple with a triple as object correctly', shouldParse(' <<_:a _:c>>.', ['a', 'b', ['_:b0_a', 'b', '_:b0_c']])); it('should parse an RDF* triple with a triple as object correctly', shouldParse(' <<_:a "c"^^>>.', ['a', 'b', ['_:b0_a', 'b', '"c"^^http://example.org/d']])); it('should parse nested triples correctly', shouldParse('<<<< >> >> .', [[['a', 'b', 'c'], 'f', 'g'], 'd', 'e'])); it('should parse nested triples correctly', shouldParse(' << << >>>>.', ['d', 'e', ['f', 'g', ['a', 'b', 'c']]])); it('should parse nested triples correctly', shouldParse('<< << >>>> .', [['f', 'g', ['a', 'b', 'c']], 'd', 'e'])); it('should parse nested triples correctly', shouldParse(' <<<< >> >>.', ['d', 'e', [['a', 'b', 'c'], 'f', 'g']])); it('should not parse nested RDF* statements that are partially closed', shouldNotParse(' <<<< >> .', 'Expected entity but got . on line 1.' )); it('should not parse partially closed nested RDF* statements', shouldNotParse(' <<<< >>.', 'Expected >> but got IRI on line 1.' )); it('should not parse nested RDF* statements with too many closing tags', shouldNotParse(' <<<< >>>> >>.', 'Expected entity but got >> on line 1.' )); it('should not parse nested RDF* statements with too many closing tags', shouldNotParse(' <<<< >> >>>>.', 'Expected entity but got >> on line 1.' )); it('should not parse RDF* statements with too many closing tags', shouldNotParse(' >>.', 'Expected entity but got >> on line 1.' )); it('should not parse incomplete RDF* statements', shouldNotParse(' << >>.', 'Expected entity but got >> on line 1.' )); it('should not parse incomplete RDF* statements', shouldNotParse('<< >> .', 'Expected entity but got >> on line 1.' )); it('should not parse incorrectly nested RDF* statements', shouldNotParse('>> <<', 'Expected entity but got >> on line 1.' )); it('should not parse a nested triple on its own', shouldNotParse('<< >>.', 'Unexpected . on line 1.' )); it('should parse an RDF* quad', shouldParse('<< >> .', [['a', 'b', 'c', 'd'], 'a', 'b'])); it('should not parse a malformed RDF* quad', shouldNotParse('<< >> .', 'Expected >> but got IRI on line 1.')); it('should parse statements with a shared RDF* subject', shouldParse('<< >> ;\n .', [['a', 'b', 'c'], 'b', 'c'], [['a', 'b', 'c'], 'd', 'c'])); it('should parse statements with a shared RDF* subject', shouldParse('<< >> ;\n << >>.', [['a', 'b', 'c'], 'b', 'c'], [['a', 'b', 'c'], 'd', ['a', 'b', 'c']])); it('should put nested triples in the default graph', shouldParse(' .\n<< >> .', ['a', 'b', 'c', 'g'], [['a', 'b', 'c'], 'd', 'e'])); }); describe('An Parser instance without document IRI', () => { function parser() { return new Parser(); } it('should keep relative IRIs', shouldParse(parser, '@prefix : <#>.\n' + ' .\n' + ':d :e :f :g.', [termFromId('a'), termFromId('b'), termFromId('c'), termFromId('g')], [termFromId('#d'), termFromId('#e'), termFromId('#f'), termFromId('#g')])); it('should keep empty IRIs', shouldParse(parser, '@prefix : <>.\n' + '<> <> <> <>.\n' + ': : : :.', [new NamedNode(''), new NamedNode(''), new NamedNode(''), new NamedNode('')], [new NamedNode(''), new NamedNode(''), new NamedNode(''), new NamedNode('')])); }); describe('An Parser instance with a document IRI', () => { function parser() { return new Parser({ baseIRI: 'http://ex.org/x/yy/zzz/f.ttl' }); } it('should resolve IRIs against the document IRI', shouldParse(parser, '@prefix : <#>.\n' + ' .\n' + ':d :e :f :g.', ['http://ex.org/x/yy/zzz/a', 'http://ex.org/x/yy/zzz/b', 'http://ex.org/x/yy/zzz/c', 'http://ex.org/x/yy/zzz/g'], ['http://ex.org/x/yy/zzz/f.ttl#d', 'http://ex.org/x/yy/zzz/f.ttl#e', 'http://ex.org/x/yy/zzz/f.ttl#f', 'http://ex.org/x/yy/zzz/f.ttl#g'])); it('should resolve IRIs with a trailing slash against the document IRI', shouldParse(parser, ' .\n', ['http://ex.org/a', 'http://ex.org/a/b', 'http://ex.org/a/b/c'])); it('should resolve IRIs starting with ./ against the document IRI', shouldParse(parser, '<./a> <./a/b> <./a/b/c>.\n', ['http://ex.org/x/yy/zzz/a', 'http://ex.org/x/yy/zzz/a/b', 'http://ex.org/x/yy/zzz/a/b/c'])); it('should resolve IRIs starting with multiple ./ sequences against the document IRI', shouldParse(parser, '<./././a> <./././././a/b> <././././././a/b/c>.\n', ['http://ex.org/x/yy/zzz/a', 'http://ex.org/x/yy/zzz/a/b', 'http://ex.org/x/yy/zzz/a/b/c'])); it('should resolve IRIs starting with ../ against the document IRI', shouldParse(parser, '<../a> <../a/b> <../a/b/c>.\n', ['http://ex.org/x/yy/a', 'http://ex.org/x/yy/a/b', 'http://ex.org/x/yy/a/b/c'])); it('should resolve IRIs starting multiple ../ sequences against the document IRI', shouldParse(parser, '<../../a> <../../../a/b> <../../../../../../../../a/b/c>.\n', ['http://ex.org/x/a', 'http://ex.org/a/b', 'http://ex.org/a/b/c'])); it('should resolve IRIs starting with mixes of ./ and ../ sequences against the document IRI', shouldParse(parser, '<.././a> <./.././a/b> <./.././.././a/b/c>.\n', ['http://ex.org/x/yy/a', 'http://ex.org/x/yy/a/b', 'http://ex.org/x/a/b/c'])); it('should resolve IRIs starting with .x, ..x, or .../ against the document IRI', shouldParse(parser, '<.x/a> <..x/a/b> <.../a/b/c>.\n', ['http://ex.org/x/yy/zzz/.x/a', 'http://ex.org/x/yy/zzz/..x/a/b', 'http://ex.org/x/yy/zzz/.../a/b/c'])); it('should resolve datatype IRIs against the document IRI', shouldParse(parser, ' "c"^^.', ['http://ex.org/x/yy/zzz/a', 'http://ex.org/x/yy/zzz/b', '"c"^^http://ex.org/x/yy/zzz/d'])); it('should resolve IRIs in lists against the document IRI', shouldParse(parser, '( )

( ).', ['_:b0', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#first', 'http://ex.org/x/yy/zzz/a'], ['_:b0', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#rest', '_:b1'], ['_:b1', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#first', 'http://ex.org/x/yy/zzz/b'], ['_:b1', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#rest', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#nil'], ['_:b0', 'http://ex.org/x/yy/zzz/p', '_:b2'], ['_:b2', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#first', 'http://ex.org/x/yy/zzz/c'], ['_:b2', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#rest', '_:b3'], ['_:b3', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#first', 'http://ex.org/x/yy/zzz/d'], ['_:b3', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#rest', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#nil'])); it('should respect @base statements', shouldParse(parser, ' .\n' + '@base .\n' + ' .\n' + '@base .\n' + ' .\n' + '@base .\n' + ' .', ['http://ex.org/x/yy/zzz/a', 'http://ex.org/x/yy/zzz/b', 'http://ex.org/x/yy/zzz/c'], ['http://ex.org/x/e', 'http://ex.org/x/f', 'http://ex.org/x/g'], ['http://ex.org/x/d/h', 'http://ex.org/x/d/i', 'http://ex.org/x/d/j'], ['http://ex.org/e/k', 'http://ex.org/e/l', 'http://ex.org/e/m'])); }); describe('A Parser instance with a blank node prefix', () => { function parser() { return new Parser({ baseIRI: BASE_IRI, blankNodePrefix: '_:blank' }); } it('should use the given prefix for blank nodes', shouldParse(parser, '_:a _:c.\n', ['_:blanka', 'b', '_:blankc'])); }); describe('A Parser instance with an empty blank node prefix', () => { function parser() { return new Parser({ baseIRI: BASE_IRI, blankNodePrefix: '' }); } it('should not use a prefix for blank nodes', shouldParse(parser, '_:a _:c.\n', ['_:a', 'b', '_:c'])); }); describe('A Parser instance with a non-string format', () => { function parser() { return new Parser({ baseIRI: BASE_IRI, format: 1 }); } it('should parse a single triple', shouldParse(parser, ' .', ['a', 'b', 'c'])); it('should parse a graph', shouldParse(parser, '{ }', ['a', 'b', 'c'])); }); describe('A Parser instance for the Turtle format', () => { function parser() { return new Parser({ baseIRI: BASE_IRI, format: 'Turtle' }); } it('should parse a single triple', shouldParse(parser, ' .', ['a', 'b', 'c'])); it('should not parse a default graph', shouldNotParse(parser, '{}', 'Unexpected graph on line 1.')); it('should not parse a named graph', shouldNotParse(parser, ' {}', 'Expected entity but got { on line 1.')); it('should not parse a named graph with the GRAPH keyword', shouldNotParse(parser, 'GRAPH {}', 'Expected entity but got GRAPH on line 1.')); it('should not parse a quad', shouldNotParse(parser, ' .', 'Expected punctuation to follow "http://example.org/c" on line 1.')); it('should not parse a variable', shouldNotParse(parser, '?a ?b ?c.', 'Unexpected "?a" on line 1.')); it('should not parse an equality statement', shouldNotParse(parser, ' = .', 'Unexpected "=" on line 1.')); it('should not parse a right implication statement', shouldNotParse(parser, ' => .', 'Unexpected "=>" on line 1.')); it('should not parse a left implication statement', shouldNotParse(parser, ' <= .', 'Unexpected "<=" on line 1.')); it('should not parse a formula as object', shouldNotParse(parser, ' {}.', 'Unexpected graph on line 1.')); it('should not parse @forSome', shouldNotParse(parser, '@forSome .', 'Unexpected "@forSome" on line 1.')); it('should not parse @forAll', shouldNotParse(parser, '@forAll .', 'Unexpected "@forAll" on line 1.')); it('should not parse a formula as list item', shouldNotParse(parser, '( { } ).', 'Unexpected graph on line 1.')); it('should not parse a literal as subject', shouldNotParse(parser, '1 .', 'Unexpected literal on line 1.')); it('should not parse RDF* in the subject position', shouldNotParse(parser, '<< >> .', 'Unexpected RDF* syntax on line 1.')); it('should not parse RDF* in the object position', shouldNotParse(parser, ' < >>.', 'Unexpected RDF* syntax on line 1.')); }); describe('A Parser instance for the TurtleStar format', () => { function parser() { return new Parser({ baseIRI: BASE_IRI, format: 'TurtleStar' }); } it('should parse RDF*', shouldParse(parser, '<< >> .', [['a', 'b', 'c'], 'b', 'c'])); it('should not parse nested quads', shouldNotParse(parser, '<<_:a _:b >> "c" .', 'Expected >> to follow "_:b0_b" on line 1.')); }); describe('A Parser instance for the TriG format', () => { function parser() { return new Parser({ baseIRI: BASE_IRI, format: 'TriG' }); } it('should parse a single triple', shouldParse(parser, ' .', ['a', 'b', 'c'])); it('should parse a default graph', shouldParse(parser, '{}')); it('should parse a named graph', shouldParse(parser, ' {}')); it('should parse a named graph with the GRAPH keyword', shouldParse(parser, 'GRAPH {}')); it('should not parse a quad', shouldNotParse(parser, ' .', 'Expected punctuation to follow "http://example.org/c" on line 1.')); it('should not parse a variable', shouldNotParse(parser, '?a ?b ?c.', 'Unexpected "?a" on line 1.')); it('should not parse an equality statement', shouldNotParse(parser, ' = .', 'Unexpected "=" on line 1.')); it('should not parse a right implication statement', shouldNotParse(parser, ' => .', 'Unexpected "=>" on line 1.')); it('should not parse a left implication statement', shouldNotParse(parser, ' <= .', 'Unexpected "<=" on line 1.')); it('should not parse a formula as object', shouldNotParse(parser, ' {}.', 'Unexpected graph on line 1.')); it('should not parse @forSome', shouldNotParse(parser, '@forSome .', 'Unexpected "@forSome" on line 1.')); it('should not parse @forAll', shouldNotParse(parser, '@forAll .', 'Unexpected "@forAll" on line 1.')); it('should not parse RDF* in the subject position', shouldNotParse(parser, '<< >> .', 'Unexpected RDF* syntax on line 1.')); it('should not parse RDF* in the object position', shouldNotParse(parser, ' << >>.', 'Unexpected RDF* syntax on line 1.')); }); describe('A Parser instance for the TriGStar format', () => { function parser() { return new Parser({ baseIRI: BASE_IRI, format: 'TriGStar' }); } it('should parse RDF*', shouldParse(parser, '<< >> .', [['a', 'b', 'c'], 'a', 'b'])); it('should not parse nested quads', shouldNotParse(parser, '<<_:a _:b >> "c" .', 'Expected >> to follow "_:b0_b" on line 1.')); }); describe('A Parser instance for the N-Triples format', () => { function parser() { return new Parser({ baseIRI: BASE_IRI, format: 'N-Triples' }); } it('should parse a single triple', shouldParse(parser, '_:a "c".', ['_:b0_a', 'http://ex.org/b', '"c"'])); it('should parse a single triple starting with Bom', shouldParse(parser, '\ufeff_:a "c".', ['_:b0_a', 'http://ex.org/b', '"c"'])); it('should not parse a single quad', shouldNotParse(parser, '_:a "c" .', 'Expected punctuation to follow ""c"" on line 1.')); it('should not parse relative IRIs', shouldNotParse(parser, ' .', 'Invalid IRI on line 1.')); it('should not parse a prefix declaration', shouldNotParse(parser, '@prefix : .', 'Unexpected "@prefix" on line 1.')); it('should not parse apostrophe literals', shouldNotParse(parser, "_:a 'c'.", "Unexpected \"'c'.\" on line 1.")); it('should not parse triple-quoted literals', shouldNotParse(parser, '_:a """c""".', 'Unexpected """"c"""." on line 1.')); it('should not parse triple-apostrophe literals', shouldNotParse(parser, "_:a '''c'''.", "Unexpected \"'''c'''.\" on line 1.")); it('should not parse a variable', shouldNotParse(parser, '?a ?b ?c.', 'Unexpected "?a" on line 1.')); it('should not parse an equality statement', shouldNotParse(parser, ' = .', 'Unexpected "=" on line 1.')); it('should not parse a right implication statement', shouldNotParse(parser, ' => .', 'Unexpected "=>" on line 1.')); it('should not parse a left implication statement', shouldNotParse(parser, ' <= .', 'Unexpected "<=" on line 1.')); it('should not parse a formula as object', shouldNotParse(parser, ' {}.', 'Unexpected "{}." on line 1.')); it('should not parse @forSome', shouldNotParse(parser, '@forSome .', 'Unexpected "@forSome" on line 1.')); it('should not parse @forAll', shouldNotParse(parser, '@forAll .', 'Unexpected "@forAll" on line 1.')); it('should not parse RDF* in the subject position', shouldNotParse(parser, '<< >> .', 'Unexpected RDF* syntax on line 1.')); it('should not parse RDF* in the object position', shouldNotParse(parser, ' << >>.', 'Unexpected RDF* syntax on line 1.')); }); describe('A Parser instance for the N-TriplesStar format', () => { function parser() { return new Parser({ baseIRI: BASE_IRI, format: 'N-TriplesStar' }); } it('should parse RDF*', shouldParse(parser, '<<_:a _:c>> _:b .', [['_:b0_a', 'b', '_:b0_c'], 'a', '_:b0_b'])); it('should not parse nested quads', shouldNotParse(parser, '<<_:a _:b >> "c" .', 'Expected >> to follow "_:b0_b" on line 1.')); }); describe('A Parser instance for the N-Quads format', () => { function parser() { return new Parser({ baseIRI: BASE_IRI, format: 'N-Quads' }); } it('should parse a single triple', shouldParse(parser, '_:a "c".', ['_:b0_a', 'http://ex.org/b', '"c"'])); it('should parse a single quad', shouldParse(parser, '_:a "c" .', ['_:b0_a', 'http://ex.org/b', '"c"', 'http://ex.org/g'])); it('should not parse relative IRIs', shouldNotParse(parser, ' .', 'Invalid IRI on line 1.')); it('should not parse a prefix declaration', shouldNotParse(parser, '@prefix : .', 'Unexpected "@prefix" on line 1.')); it('should not parse a variable', shouldNotParse(parser, '?a ?b ?c.', 'Unexpected "?a" on line 1.')); it('should not parse an equality statement', shouldNotParse(parser, ' = .', 'Unexpected "=" on line 1.')); it('should not parse a right implication statement', shouldNotParse(parser, ' => .', 'Unexpected "=>" on line 1.')); it('should not parse a left implication statement', shouldNotParse(parser, ' <= .', 'Unexpected "<=" on line 1.')); it('should not parse a formula as object', shouldNotParse(parser, ' {}.', 'Unexpected "{}." on line 1.')); it('should not parse @forSome', shouldNotParse(parser, '@forSome .', 'Unexpected "@forSome" on line 1.')); it('should not parse @forAll', shouldNotParse(parser, '@forAll .', 'Unexpected "@forAll" on line 1.')); it('should not parse RDF* in the subject position', shouldNotParse(parser, '<< >> .', 'Unexpected RDF* syntax on line 1.')); it('should not parse RDF* in the object position', shouldNotParse(parser, '_:a << >>.', 'Unexpected RDF* syntax on line 1.')); }); describe('A Parser instance for the N-QuadsStar format', () => { function parser() { return new Parser({ baseIRI: BASE_IRI, format: 'N-QuadsStar' }); } it('should parse RDF*', shouldParse(parser, '<<_:a _:c>> _:c .', [['_:b0_a', 'b', '_:b0_c'], 'a', '_:b0_c'])); }); describe('A Parser instance for the N3 format', () => { function parser() { return new Parser({ baseIRI: BASE_IRI, format: 'N3' }); } it('should parse a single triple', shouldParse(parser, ' .', ['a', 'b', 'c'])); it('should not parse a default graph', shouldNotParse(parser, '{}', 'Expected entity but got eof on line 1.')); it('should not parse a named graph', shouldNotParse(parser, ' {}', 'Expected entity but got { on line 1.')); it('should not parse a named graph with the GRAPH keyword', shouldNotParse(parser, 'GRAPH {}', 'Expected entity but got GRAPH on line 1.')); it('should not parse a quad', shouldNotParse(parser, ' .', 'Expected punctuation to follow "http://example.org/c" on line 1.')); it('allows a blank node in predicate position', shouldParse(parser, ' [] .', ['a', '_:b0', 'c'])); it('allows a blank node label in predicate position', shouldParse(parser, ' _:b .', ['a', '_:b0_b', 'c'])); it('allows a blank node with properties in predicate position', shouldParse(parser, ' [

] .', ['a', '_:b0', 'c'], ['_:b0', 'p', 'o'])); it('should parse a variable', shouldParse(parser, '?a ?b ?c.', ['?a', '?b', '?c'])); it('should parse a simple equality', shouldParse(parser, ' = .', ['a', 'http://www.w3.org/2002/07/owl#sameAs', 'b'])); it('should parse a simple right implication', shouldParse(parser, ' => .', ['a', 'http://www.w3.org/2000/10/swap/log#implies', 'b'])); it('should parse a simple left implication', shouldParse(parser, ' <= .', ['b', 'http://www.w3.org/2000/10/swap/log#implies', 'a'])); it('should parse a right implication between one-triple graphs', shouldParse(parser, '{ ?a ?b . } => { ?a }.', ['_:b0', 'http://www.w3.org/2000/10/swap/log#implies', '_:b1'], ['?a', '?b', 'c', '_:b0'], ['d', 'e', '?a', '_:b1'])); it('should parse a right implication between two-triple graphs', shouldParse(parser, '{ ?a ?b . . } => { ?a, }.', ['_:b0', 'http://www.w3.org/2000/10/swap/log#implies', '_:b1'], ['?a', '?b', 'c', '_:b0'], ['d', 'e', 'f', '_:b0'], ['d', 'e', '?a', '_:b1'], ['d', 'e', 'f', '_:b1'])); it('should parse a left implication between one-triple graphs', shouldParse(parser, '{ ?a ?b . } <= { ?a }.', ['_:b1', 'http://www.w3.org/2000/10/swap/log#implies', '_:b0'], ['?a', '?b', 'c', '_:b0'], ['d', 'e', '?a', '_:b1'])); it('should parse a left implication between two-triple graphs', shouldParse(parser, '{ ?a ?b . . } <= { ?a, }.', ['_:b1', 'http://www.w3.org/2000/10/swap/log#implies', '_:b0'], ['?a', '?b', 'c', '_:b0'], ['d', 'e', 'f', '_:b0'], ['d', 'e', '?a', '_:b1'], ['d', 'e', 'f', '_:b1'])); it('should parse an equality of one-triple graphs', shouldParse(parser, '{ ?a ?b . } = { ?a }.', ['_:b0', 'http://www.w3.org/2002/07/owl#sameAs', '_:b1'], ['?a', '?b', 'c', '_:b0'], ['d', 'e', '?a', '_:b1'])); it('should parse an equality of two-triple graphs', shouldParse(parser, '{ ?a ?b . . } = { ?a, }.', ['_:b0', 'http://www.w3.org/2002/07/owl#sameAs', '_:b1'], ['?a', '?b', 'c', '_:b0'], ['d', 'e', 'f', '_:b0'], ['d', 'e', '?a', '_:b1'], ['d', 'e', 'f', '_:b1'])); it('should parse nested implication graphs', shouldParse(parser, '{ { ?a ?b ?c }<={ ?d ?e ?f }. } <= { { ?g ?h ?i } => { ?j ?k ?l } }.', ['_:b3', 'http://www.w3.org/2000/10/swap/log#implies', '_:b0'], ['_:b2', 'http://www.w3.org/2000/10/swap/log#implies', '_:b1', '_:b0'], ['?a', '?b', '?c', '_:b1'], ['?d', '?e', '?f', '_:b2'], ['_:b4', 'http://www.w3.org/2000/10/swap/log#implies', '_:b5', '_:b3'], ['?g', '?h', '?i', '_:b4'], ['?j', '?k', '?l', '_:b5'])); it('should not reuse identifiers of blank nodes within and outside of formulas', shouldParse(parser, '_:a _:b _:c. { _:a _:b _:c } => { { _:a _:b _:c } => { _:a _:b _:c } }.', ['_:b0_a', '_:b0_b', '_:b0_c'], ['_:b0', 'http://www.w3.org/2000/10/swap/log#implies', '_:b1', ''], ['_:b0.a', '_:b0.b', '_:b0.c', '_:b0'], ['_:b2', 'http://www.w3.org/2000/10/swap/log#implies', '_:b3', '_:b1'], ['_:b2.a', '_:b2.b', '_:b2.c', '_:b2'], ['_:b3.a', '_:b3.b', '_:b3.c', '_:b3'])); it('should parse a @forSome statement', shouldParse(parser, '@forSome . .', ['_:b0', '_:b0', '_:b0'])); it('should parse a @forSome statement with multiple entities', shouldParse(parser, '@prefix a: . @base . @forSome a:x, , a:z. a:x a:z.', ['_:b0', '_:b1', '_:b2'])); it('should not parse a @forSome statement with an invalid prefix', shouldNotParse(parser, '@forSome a:b.', 'Undefined prefix "a:" on line 1.')); it('should not parse a @forSome statement with a blank node', shouldNotParse(parser, '@forSome _:a.', 'Unexpected blank on line 1.')); it('should not parse a @forSome statement with a variable', shouldNotParse(parser, '@forSome ?a.', 'Unexpected var on line 1.')); it('should correctly scope @forSome statements', shouldParse(parser, '@forSome . { @forSome . . }. .', ['_:b0', '_:b0', '_:b1'], ['_:b2', '_:b2', '_:b2', '_:b1'], ['_:b0', '_:b0', '_:b0'])); it('should parse a @forAll statement', shouldParse(parser, '@forAll . .', ['?b0', '?b0', '?b0'])); it('should parse a @forAll statement with multiple entities', shouldParse(parser, '@prefix a: . @base . @forAll a:x, , a:z. a:x a:z.', ['?b0', '?b1', '?b2'])); it('should not parse a @forAll statement with an invalid prefix', shouldNotParse(parser, '@forAll a:b.', 'Undefined prefix "a:" on line 1.')); it('should not parse a @forAll statement with a blank node', shouldNotParse(parser, '@forAll _:a.', 'Unexpected blank on line 1.')); it('should not parse a @forAll statement with a variable', shouldNotParse(parser, '@forAll ?a.', 'Unexpected var on line 1.')); it('should correctly scope @forAll statements', shouldParse(parser, '@forAll . { @forAll . . }. .', ['?b0', '?b0', '_:b1'], ['?b2', '?b2', '?b2', '_:b1'], ['?b0', '?b0', '?b0'])); it('should parse a ! path of length 2 as subject', shouldParse(parser, '@prefix : . @prefix fam: .' + ':joe!fam:mother a fam:Person.', ['ex:joe', 'f:mother', '_:b0'], ['_:b0', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type', 'f:Person'])); it('should parse a ! path of length 4 as subject', shouldParse(parser, '@prefix : . @prefix fam: . @prefix loc: .' + ':joe!fam:mother!loc:office!loc:zip loc:code 1234.', ['ex:joe', 'f:mother', '_:b0'], ['_:b0', 'l:office', '_:b1'], ['_:b1', 'l:zip', '_:b2'], ['_:b2', 'l:code', '"1234"^^http://www.w3.org/2001/XMLSchema#integer'])); it('should parse a ! path of length 2 as object', shouldParse(parser, '@prefix : . @prefix fam: .' + ' :joe!fam:mother.', ['x', 'is', '_:b0'], ['ex:joe', 'f:mother', '_:b0'])); it('should parse a ! path of length 4 as object', shouldParse(parser, '@prefix : . @prefix fam: . @prefix loc: .' + ' :joe!fam:mother!loc:office!loc:zip.', ['x', 'is', '_:b2'], ['ex:joe', 'f:mother', '_:b0'], ['_:b0', 'l:office', '_:b1'], ['_:b1', 'l:zip', '_:b2'])); it('should parse a ^ path of length 2 as subject', shouldParse(parser, '@prefix : . @prefix fam: .' + ':joe^fam:son a fam:Person.', ['_:b0', 'f:son', 'ex:joe'], ['_:b0', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type', 'f:Person'])); it('should parse a ^ path of length 4 as subject', shouldParse(parser, '@prefix : . @prefix fam: .' + ':joe^fam:son^fam:sister^fam:mother a fam:Person.', ['_:b0', 'f:son', 'ex:joe'], ['_:b1', 'f:sister', '_:b0'], ['_:b2', 'f:mother', '_:b1'], ['_:b2', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type', 'f:Person'])); it('should parse a ^ path of length 2 as object', shouldParse(parser, '@prefix : . @prefix fam: .' + ' :joe^fam:son.', ['x', 'is', '_:b0'], ['_:b0', 'f:son', 'ex:joe'])); it('should parse a ^ path of length 4 as object', shouldParse(parser, '@prefix : . @prefix fam: .' + ' :joe^fam:son^fam:sister^fam:mother.', ['x', 'is', '_:b2'], ['_:b0', 'f:son', 'ex:joe'], ['_:b1', 'f:sister', '_:b0'], ['_:b2', 'f:mother', '_:b1'])); it('should parse mixed !/^ paths as subject', shouldParse(parser, '@prefix : . @prefix fam: .' + ':joe!fam:mother^fam:mother a fam:Person.', ['ex:joe', 'f:mother', '_:b0'], ['_:b1', 'f:mother', '_:b0'], ['_:b1', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type', 'f:Person'])); it('should parse mixed !/^ paths as object', shouldParse(parser, '@prefix : . @prefix fam: .' + ' :joe!fam:mother^fam:mother.', ['x', 'is', '_:b1'], ['ex:joe', 'f:mother', '_:b0'], ['_:b1', 'f:mother', '_:b0'])); it('should parse a ! path in a blank node as subject', shouldParse(parser, '@prefix : . @prefix fam: .' + '[fam:knows :joe!fam:mother] a fam:Person.', ['_:b0', 'f:knows', '_:b1'], ['ex:joe', 'f:mother', '_:b1'], ['_:b0', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type', 'f:Person'])); it('should parse a ! path in a blank node as object', shouldParse(parser, '@prefix : . @prefix fam: .' + ' [fam:knows :joe!fam:mother].', ['x', 'is', '_:b0'], ['_:b0', 'f:knows', '_:b1'], ['ex:joe', 'f:mother', '_:b1'])); it('should parse a ^ path in a blank node as subject', shouldParse(parser, '@prefix : . @prefix fam: .' + '[fam:knows :joe^fam:son] a fam:Person.', ['_:b0', 'f:knows', '_:b1'], ['_:b1', 'f:son', 'ex:joe'], ['_:b0', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type', 'f:Person'])); it('should parse a ^ path in a blank node as object', shouldParse(parser, '@prefix : . @prefix fam: .' + ' [fam:knows :joe^fam:son].', ['x', 'is', '_:b0'], ['_:b0', 'f:knows', '_:b1'], ['_:b1', 'f:son', 'ex:joe'])); it('should parse a ! path in a list as subject', shouldParse(parser, '@prefix : . @prefix fam: .' + '( :joe!fam:mother ) a :List.', ['_:b0', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type', 'ex:List'], ['_:b0', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#first', 'x'], ['_:b0', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#rest', '_:b1'], ['_:b1', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#first', '_:b2'], ['_:b1', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#rest', '_:b3'], ['_:b3', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#first', 'y'], ['_:b3', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#rest', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#nil'], ['ex:joe', 'f:mother', '_:b2'])); it('should parse a ! path in a list as object', shouldParse(parser, '@prefix : . @prefix fam: .' + ' ( :joe!fam:mother ).', ['l', 'is', '_:b0'], ['_:b0', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#first', 'x'], ['_:b0', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#rest', '_:b1'], ['_:b1', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#first', '_:b2'], ['_:b1', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#rest', '_:b3'], ['_:b3', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#first', 'y'], ['_:b3', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#rest', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#nil'], ['ex:joe', 'f:mother', '_:b2'])); it('should parse a ^ path in a list as subject', shouldParse(parser, '@prefix : . @prefix fam: .' + '( :joe^fam:son ) a :List.', ['_:b0', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type', 'ex:List'], ['_:b0', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#first', 'x'], ['_:b0', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#rest', '_:b1'], ['_:b1', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#first', '_:b2'], ['_:b1', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#rest', '_:b3'], ['_:b3', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#first', 'y'], ['_:b3', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#rest', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#nil'], ['_:b2', 'f:son', 'ex:joe'])); it('should parse a ^ path in a list as object', shouldParse(parser, '@prefix : . @prefix fam: .' + ' ( :joe^fam:son ).', ['l', 'is', '_:b0'], ['_:b0', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#first', 'x'], ['_:b0', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#rest', '_:b1'], ['_:b1', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#first', '_:b2'], ['_:b1', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#rest', '_:b3'], ['_:b3', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#first', 'y'], ['_:b3', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#rest', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#nil'], ['_:b2', 'f:son', 'ex:joe'])); it('should parse a formula as list item', shouldParse(parser, ' ( { a . } ).', ['a', 'findAll', '_:b0'], ['_:b0', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#first', 'b'], ['_:b0', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#rest', '_:b2'], ['_:b2', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#first', 'o'], ['_:b2', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#rest', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#nil'], ['b', 'something', 'foo', '_:b1'], ['b', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type', 'type', '_:b1'] )); it('should not parse an invalid ! path', shouldNotParse(parser, '!"invalid" ', 'Expected entity but got literal on line 1.')); it('should not parse an invalid ^ path', shouldNotParse(parser, '^"invalid" ', 'Expected entity but got literal on line 1.')); it('should parse literal as subject', shouldParse(parser, ' {1 0}.', ['a', 'b', '_:b0'], ['"1"^^http://www.w3.org/2001/XMLSchema#integer', 'greaterThan', '"0"^^http://www.w3.org/2001/XMLSchema#integer', '_:b0'] )); it('should parse literals with datatype as subject', shouldParse(parser, ' {"a"^^ "b"^^}.', ['a', 'b', '_:b0'], ['"a"^^http://example.org/c', 'greaterThan', '"b"^^http://example.org/c', '_:b0'] )); it('should parse literals with language as subject', shouldParse(parser, ' {"bonjour"@fr "hello"@en}.', ['a', 'b', '_:b0'], ['"bonjour"@fr', 'sameAs', '"hello"@en', '_:b0'] )); it('should not parse RDF* in the subject position', shouldNotParse(parser, '<< >> .', 'Unexpected RDF* syntax on line 1.')); it('should not parse RDF* in the object position', shouldNotParse(parser, ' << >>.', 'Unexpected RDF* syntax on line 1.')); }); describe('A Parser instance for the N3Star format', () => { function parser() { return new Parser({ baseIRI: BASE_IRI, format: 'N3Star' }); } it('should parse RDF*', shouldParse(parser, '<< >> .', [['a', 'b', 'c'], 'a', 'b'])); it('should not parse nested quads', shouldNotParse(parser, '<<_:a _:b >> "c" .', 'Expected >> to follow "_:.b" on line 1.')); }); describe('A Parser instance for the N3 format with the explicitQuantifiers option', () => { function parser() { return new Parser({ baseIRI: BASE_IRI, format: 'N3', explicitQuantifiers: true }); } it('should parse a @forSome statement', shouldParse(parser, '@forSome . .', ['', 'http://www.w3.org/2000/10/swap/reify#forSome', '_:b0', 'urn:n3:quantifiers'], ['_:b0', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#first', 'x', 'urn:n3:quantifiers'], ['_:b0', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#rest', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#nil', 'urn:n3:quantifiers'], ['x', 'x', 'x'])); it('should parse a @forSome statement with multiple entities', shouldParse(parser, '@prefix a: . @base . @forSome a:x, , a:z. a:x a:z.', ['', 'http://www.w3.org/2000/10/swap/reify#forSome', '_:b0', 'urn:n3:quantifiers'], ['_:b0', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#first', 'a:x', 'urn:n3:quantifiers'], ['_:b0', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#rest', '_:b1', 'urn:n3:quantifiers'], ['_:b1', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#first', 'b:y', 'urn:n3:quantifiers'], ['_:b1', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#rest', '_:b2', 'urn:n3:quantifiers'], ['_:b2', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#first', 'a:z', 'urn:n3:quantifiers'], ['_:b2', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#rest', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#nil', 'urn:n3:quantifiers'], ['a:x', 'b:y', 'a:z'])); it('should correctly scope @forSome statements', shouldParse(parser, '@forSome . { @forSome . . }. .', ['', 'http://www.w3.org/2000/10/swap/reify#forSome', '_:b0', 'urn:n3:quantifiers'], ['_:b0', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#first', 'x', 'urn:n3:quantifiers'], ['_:b0', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#rest', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#nil', 'urn:n3:quantifiers'], ['x', 'x', '_:b1'], ['_:b1', 'http://www.w3.org/2000/10/swap/reify#forSome', '_:b2', 'urn:n3:quantifiers'], ['_:b2', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#first', 'x', 'urn:n3:quantifiers'], ['_:b2', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#rest', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#nil', 'urn:n3:quantifiers'], ['x', 'x', 'x', '_:b1'], ['x', 'x', 'x'])); it('should parse a @forAll statement', shouldParse(parser, '@forAll . .', ['', 'http://www.w3.org/2000/10/swap/reify#forAll', '_:b0', 'urn:n3:quantifiers'], ['_:b0', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#first', 'x', 'urn:n3:quantifiers'], ['_:b0', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#rest', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#nil', 'urn:n3:quantifiers'], ['x', 'x', 'x'])); it('should parse a @forAll statement with multiple entities', shouldParse(parser, '@prefix a: . @base . @forAll a:x, , a:z. a:x a:z.', ['', 'http://www.w3.org/2000/10/swap/reify#forAll', '_:b0', 'urn:n3:quantifiers'], ['_:b0', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#first', 'a:x', 'urn:n3:quantifiers'], ['_:b0', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#rest', '_:b1', 'urn:n3:quantifiers'], ['_:b1', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#first', 'b:y', 'urn:n3:quantifiers'], ['_:b1', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#rest', '_:b2', 'urn:n3:quantifiers'], ['_:b2', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#first', 'a:z', 'urn:n3:quantifiers'], ['_:b2', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#rest', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#nil', 'urn:n3:quantifiers'], ['a:x', 'b:y', 'a:z'])); it('should correctly scope @forAll statements', shouldParse(parser, '@forAll . { @forAll . . }. .', ['', 'http://www.w3.org/2000/10/swap/reify#forAll', '_:b0', 'urn:n3:quantifiers'], ['_:b0', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#first', 'x', 'urn:n3:quantifiers'], ['_:b0', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#rest', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#nil', 'urn:n3:quantifiers'], ['x', 'x', '_:b1'], ['_:b1', 'http://www.w3.org/2000/10/swap/reify#forAll', '_:b2', 'urn:n3:quantifiers'], ['_:b2', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#first', 'x', 'urn:n3:quantifiers'], ['_:b2', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#rest', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#nil', 'urn:n3:quantifiers'], ['x', 'x', 'x', '_:b1'], ['x', 'x', 'x'])); }); describe('A Parser instance with a custom DataFactory', () => { const factory = {}; let parser; before(() => { factory.quad = function (s, p, o, g) { return { s: s, p: p, o: o, g: g }; }; ['namedNode', 'blankNode', 'literal', 'variable', 'defaultGraph'].forEach(f => { factory[f] = function (n) { return n ? `${f[0]}-${n}` : f; }; }); parser = new Parser({ baseIRI: BASE_IRI, format: 'n3', factory: factory }); }); it('should use the custom factory', () => { parser.parse(' ?b 1, _:d.').should.deep.equal([ { s: 'n-http://example.org/a', p: 'v-b', o: 'l-1', g: 'defaultGraph' }, { s: 'n-http://example.org/a', p: 'v-b', o: 'b-b0_d', g: 'defaultGraph' }, ]); }); }); describe('IRI resolution', () => { describe('RFC3986 normal examples', () => { itShouldResolve('http://a/bb/ccc/d;p?q', 'g:h', 'g:h'); itShouldResolve('http://a/bb/ccc/d;p?q', 'g', 'http://a/bb/ccc/g'); itShouldResolve('http://a/bb/ccc/d;p?q', './g', 'http://a/bb/ccc/g'); itShouldResolve('http://a/bb/ccc/d;p?q', 'g/', 'http://a/bb/ccc/g/'); itShouldResolve('http://a/bb/ccc/d;p?q', '/g', 'http://a/g'); itShouldResolve('http://a/bb/ccc/d;p?q', '//g', 'http://g'); itShouldResolve('http://a/bb/ccc/d;p?q', '?y', 'http://a/bb/ccc/d;p?y'); itShouldResolve('http://a/bb/ccc/d;p?q', 'g?y', 'http://a/bb/ccc/g?y'); itShouldResolve('http://a/bb/ccc/d;p?q', '#s', 'http://a/bb/ccc/d;p?q#s'); itShouldResolve('http://a/bb/ccc/d;p?q', 'g#s', 'http://a/bb/ccc/g#s'); itShouldResolve('http://a/bb/ccc/d;p?q', 'g?y#s', 'http://a/bb/ccc/g?y#s'); itShouldResolve('http://a/bb/ccc/d;p?q', ';x', 'http://a/bb/ccc/;x'); itShouldResolve('http://a/bb/ccc/d;p?q', 'g;x', 'http://a/bb/ccc/g;x'); itShouldResolve('http://a/bb/ccc/d;p?q', 'g;x?y#s', 'http://a/bb/ccc/g;x?y#s'); itShouldResolve('http://a/bb/ccc/d;p?q', '', 'http://a/bb/ccc/d;p?q'); itShouldResolve('http://a/bb/ccc/d;p?q', '.', 'http://a/bb/ccc/'); itShouldResolve('http://a/bb/ccc/d;p?q', './', 'http://a/bb/ccc/'); itShouldResolve('http://a/bb/ccc/d;p?q', '..', 'http://a/bb/'); itShouldResolve('http://a/bb/ccc/d;p?q', '../', 'http://a/bb/'); itShouldResolve('http://a/bb/ccc/d;p?q', '../g', 'http://a/bb/g'); itShouldResolve('http://a/bb/ccc/d;p?q', '../..', 'http://a/'); itShouldResolve('http://a/bb/ccc/d;p?q', '../../', 'http://a/'); itShouldResolve('http://a/bb/ccc/d;p?q', '../../g', 'http://a/g'); }); describe('RFC3986 abnormal examples', () => { itShouldResolve('http://a/bb/ccc/d;p?q', '../../../g', 'http://a/g'); itShouldResolve('http://a/bb/ccc/d;p?q', '../../../../g', 'http://a/g'); itShouldResolve('http://a/bb/ccc/d;p?q', '/./g', 'http://a/g'); itShouldResolve('http://a/bb/ccc/d;p?q', '/../g', 'http://a/g'); itShouldResolve('http://a/bb/ccc/d;p?q', 'g.', 'http://a/bb/ccc/g.'); itShouldResolve('http://a/bb/ccc/d;p?q', '.g', 'http://a/bb/ccc/.g'); itShouldResolve('http://a/bb/ccc/d;p?q', 'g..', 'http://a/bb/ccc/g..'); itShouldResolve('http://a/bb/ccc/d;p?q', '..g', 'http://a/bb/ccc/..g'); itShouldResolve('http://a/bb/ccc/d;p?q', './../g', 'http://a/bb/g'); itShouldResolve('http://a/bb/ccc/d;p?q', './g/.', 'http://a/bb/ccc/g/'); itShouldResolve('http://a/bb/ccc/d;p?q', 'g/./h', 'http://a/bb/ccc/g/h'); itShouldResolve('http://a/bb/ccc/d;p?q', 'g/../h', 'http://a/bb/ccc/h'); itShouldResolve('http://a/bb/ccc/d;p?q', 'g;x=1/./y', 'http://a/bb/ccc/g;x=1/y'); itShouldResolve('http://a/bb/ccc/d;p?q', 'g;x=1/../y', 'http://a/bb/ccc/y'); itShouldResolve('http://a/bb/ccc/d;p?q', 'g?y/./x', 'http://a/bb/ccc/g?y/./x'); itShouldResolve('http://a/bb/ccc/d;p?q', 'g?y/../x', 'http://a/bb/ccc/g?y/../x'); itShouldResolve('http://a/bb/ccc/d;p?q', 'g#s/./x', 'http://a/bb/ccc/g#s/./x'); itShouldResolve('http://a/bb/ccc/d;p?q', 'g#s/../x', 'http://a/bb/ccc/g#s/../x'); itShouldResolve('http://a/bb/ccc/d;p?q', 'http:g', 'http:g'); }); describe('RFC3986 normal examples with trailing slash in base IRI', () => { itShouldResolve('http://a/bb/ccc/d/', 'g:h', 'g:h'); itShouldResolve('http://a/bb/ccc/d/', 'g', 'http://a/bb/ccc/d/g'); itShouldResolve('http://a/bb/ccc/d/', './g', 'http://a/bb/ccc/d/g'); itShouldResolve('http://a/bb/ccc/d/', 'g/', 'http://a/bb/ccc/d/g/'); itShouldResolve('http://a/bb/ccc/d/', '/g', 'http://a/g'); itShouldResolve('http://a/bb/ccc/d/', '//g', 'http://g'); itShouldResolve('http://a/bb/ccc/d/', '?y', 'http://a/bb/ccc/d/?y'); itShouldResolve('http://a/bb/ccc/d/', 'g?y', 'http://a/bb/ccc/d/g?y'); itShouldResolve('http://a/bb/ccc/d/', '#s', 'http://a/bb/ccc/d/#s'); itShouldResolve('http://a/bb/ccc/d/', 'g#s', 'http://a/bb/ccc/d/g#s'); itShouldResolve('http://a/bb/ccc/d/', 'g?y#s', 'http://a/bb/ccc/d/g?y#s'); itShouldResolve('http://a/bb/ccc/d/', ';x', 'http://a/bb/ccc/d/;x'); itShouldResolve('http://a/bb/ccc/d/', 'g;x', 'http://a/bb/ccc/d/g;x'); itShouldResolve('http://a/bb/ccc/d/', 'g;x?y#s', 'http://a/bb/ccc/d/g;x?y#s'); itShouldResolve('http://a/bb/ccc/d/', '', 'http://a/bb/ccc/d/'); itShouldResolve('http://a/bb/ccc/d/', '.', 'http://a/bb/ccc/d/'); itShouldResolve('http://a/bb/ccc/d/', './', 'http://a/bb/ccc/d/'); itShouldResolve('http://a/bb/ccc/d/', '..', 'http://a/bb/ccc/'); itShouldResolve('http://a/bb/ccc/d/', '../', 'http://a/bb/ccc/'); itShouldResolve('http://a/bb/ccc/d/', '../g', 'http://a/bb/ccc/g'); itShouldResolve('http://a/bb/ccc/d/', '../..', 'http://a/bb/'); itShouldResolve('http://a/bb/ccc/d/', '../../', 'http://a/bb/'); itShouldResolve('http://a/bb/ccc/d/', '../../g', 'http://a/bb/g'); }); describe('RFC3986 abnormal examples with trailing slash in base IRI', () => { itShouldResolve('http://a/bb/ccc/d/', '../../../g', 'http://a/g'); itShouldResolve('http://a/bb/ccc/d/', '../../../../g', 'http://a/g'); itShouldResolve('http://a/bb/ccc/d/', '/./g', 'http://a/g'); itShouldResolve('http://a/bb/ccc/d/', '/../g', 'http://a/g'); itShouldResolve('http://a/bb/ccc/d/', 'g.', 'http://a/bb/ccc/d/g.'); itShouldResolve('http://a/bb/ccc/d/', '.g', 'http://a/bb/ccc/d/.g'); itShouldResolve('http://a/bb/ccc/d/', 'g..', 'http://a/bb/ccc/d/g..'); itShouldResolve('http://a/bb/ccc/d/', '..g', 'http://a/bb/ccc/d/..g'); itShouldResolve('http://a/bb/ccc/d/', './../g', 'http://a/bb/ccc/g'); itShouldResolve('http://a/bb/ccc/d/', './g/.', 'http://a/bb/ccc/d/g/'); itShouldResolve('http://a/bb/ccc/d/', 'g/./h', 'http://a/bb/ccc/d/g/h'); itShouldResolve('http://a/bb/ccc/d/', 'g/../h', 'http://a/bb/ccc/d/h'); itShouldResolve('http://a/bb/ccc/d/', 'g;x=1/./y', 'http://a/bb/ccc/d/g;x=1/y'); itShouldResolve('http://a/bb/ccc/d/', 'g;x=1/../y', 'http://a/bb/ccc/d/y'); itShouldResolve('http://a/bb/ccc/d/', 'g?y/./x', 'http://a/bb/ccc/d/g?y/./x'); itShouldResolve('http://a/bb/ccc/d/', 'g?y/../x', 'http://a/bb/ccc/d/g?y/../x'); itShouldResolve('http://a/bb/ccc/d/', 'g#s/./x', 'http://a/bb/ccc/d/g#s/./x'); itShouldResolve('http://a/bb/ccc/d/', 'g#s/../x', 'http://a/bb/ccc/d/g#s/../x'); itShouldResolve('http://a/bb/ccc/d/', 'http:g', 'http:g'); }); describe('RFC3986 normal examples with /. in the base IRI', () => { itShouldResolve('http://a/bb/ccc/./d;p?q', 'g:h', 'g:h'); itShouldResolve('http://a/bb/ccc/./d;p?q', 'g', 'http://a/bb/ccc/g'); itShouldResolve('http://a/bb/ccc/./d;p?q', './g', 'http://a/bb/ccc/g'); itShouldResolve('http://a/bb/ccc/./d;p?q', 'g/', 'http://a/bb/ccc/g/'); itShouldResolve('http://a/bb/ccc/./d;p?q', '/g', 'http://a/g'); itShouldResolve('http://a/bb/ccc/./d;p?q', '//g', 'http://g'); itShouldResolve('http://a/bb/ccc/./d;p?q', '?y', 'http://a/bb/ccc/./d;p?y'); itShouldResolve('http://a/bb/ccc/./d;p?q', 'g?y', 'http://a/bb/ccc/g?y'); itShouldResolve('http://a/bb/ccc/./d;p?q', '#s', 'http://a/bb/ccc/./d;p?q#s'); itShouldResolve('http://a/bb/ccc/./d;p?q', 'g#s', 'http://a/bb/ccc/g#s'); itShouldResolve('http://a/bb/ccc/./d;p?q', 'g?y#s', 'http://a/bb/ccc/g?y#s'); itShouldResolve('http://a/bb/ccc/./d;p?q', ';x', 'http://a/bb/ccc/;x'); itShouldResolve('http://a/bb/ccc/./d;p?q', 'g;x', 'http://a/bb/ccc/g;x'); itShouldResolve('http://a/bb/ccc/./d;p?q', 'g;x?y#s', 'http://a/bb/ccc/g;x?y#s'); itShouldResolve('http://a/bb/ccc/./d;p?q', '', 'http://a/bb/ccc/./d;p?q'); itShouldResolve('http://a/bb/ccc/./d;p?q', '.', 'http://a/bb/ccc/'); itShouldResolve('http://a/bb/ccc/./d;p?q', './', 'http://a/bb/ccc/'); itShouldResolve('http://a/bb/ccc/./d;p?q', '..', 'http://a/bb/'); itShouldResolve('http://a/bb/ccc/./d;p?q', '../', 'http://a/bb/'); itShouldResolve('http://a/bb/ccc/./d;p?q', '../g', 'http://a/bb/g'); itShouldResolve('http://a/bb/ccc/./d;p?q', '../..', 'http://a/'); itShouldResolve('http://a/bb/ccc/./d;p?q', '../../', 'http://a/'); itShouldResolve('http://a/bb/ccc/./d;p?q', '../../g', 'http://a/g'); }); describe('RFC3986 abnormal examples with /. in the base IRI', () => { itShouldResolve('http://a/bb/ccc/./d;p?q', '../../../g', 'http://a/g'); itShouldResolve('http://a/bb/ccc/./d;p?q', '../../../../g', 'http://a/g'); itShouldResolve('http://a/bb/ccc/./d;p?q', '/./g', 'http://a/g'); itShouldResolve('http://a/bb/ccc/./d;p?q', '/../g', 'http://a/g'); itShouldResolve('http://a/bb/ccc/./d;p?q', 'g.', 'http://a/bb/ccc/g.'); itShouldResolve('http://a/bb/ccc/./d;p?q', '.g', 'http://a/bb/ccc/.g'); itShouldResolve('http://a/bb/ccc/./d;p?q', 'g..', 'http://a/bb/ccc/g..'); itShouldResolve('http://a/bb/ccc/./d;p?q', '..g', 'http://a/bb/ccc/..g'); itShouldResolve('http://a/bb/ccc/./d;p?q', './../g', 'http://a/bb/g'); itShouldResolve('http://a/bb/ccc/./d;p?q', './g/.', 'http://a/bb/ccc/g/'); itShouldResolve('http://a/bb/ccc/./d;p?q', 'g/./h', 'http://a/bb/ccc/g/h'); itShouldResolve('http://a/bb/ccc/./d;p?q', 'g/../h', 'http://a/bb/ccc/h'); itShouldResolve('http://a/bb/ccc/./d;p?q', 'g;x=1/./y', 'http://a/bb/ccc/g;x=1/y'); itShouldResolve('http://a/bb/ccc/./d;p?q', 'g;x=1/../y', 'http://a/bb/ccc/y'); itShouldResolve('http://a/bb/ccc/./d;p?q', 'g?y/./x', 'http://a/bb/ccc/g?y/./x'); itShouldResolve('http://a/bb/ccc/./d;p?q', 'g?y/../x', 'http://a/bb/ccc/g?y/../x'); itShouldResolve('http://a/bb/ccc/./d;p?q', 'g#s/./x', 'http://a/bb/ccc/g#s/./x'); itShouldResolve('http://a/bb/ccc/./d;p?q', 'g#s/../x', 'http://a/bb/ccc/g#s/../x'); itShouldResolve('http://a/bb/ccc/./d;p?q', 'http:g', 'http:g'); }); describe('RFC3986 normal examples with /.. in the base IRI', () => { itShouldResolve('http://a/bb/ccc/../d;p?q', 'g:h', 'g:h'); itShouldResolve('http://a/bb/ccc/../d;p?q', 'g', 'http://a/bb/g'); itShouldResolve('http://a/bb/ccc/../d;p?q', './g', 'http://a/bb/g'); itShouldResolve('http://a/bb/ccc/../d;p?q', 'g/', 'http://a/bb/g/'); itShouldResolve('http://a/bb/ccc/../d;p?q', '/g', 'http://a/g'); itShouldResolve('http://a/bb/ccc/../d;p?q', '//g', 'http://g'); itShouldResolve('http://a/bb/ccc/../d;p?q', '?y', 'http://a/bb/ccc/../d;p?y'); itShouldResolve('http://a/bb/ccc/../d;p?q', 'g?y', 'http://a/bb/g?y'); itShouldResolve('http://a/bb/ccc/../d;p?q', '#s', 'http://a/bb/ccc/../d;p?q#s'); itShouldResolve('http://a/bb/ccc/../d;p?q', 'g#s', 'http://a/bb/g#s'); itShouldResolve('http://a/bb/ccc/../d;p?q', 'g?y#s', 'http://a/bb/g?y#s'); itShouldResolve('http://a/bb/ccc/../d;p?q', ';x', 'http://a/bb/;x'); itShouldResolve('http://a/bb/ccc/../d;p?q', 'g;x', 'http://a/bb/g;x'); itShouldResolve('http://a/bb/ccc/../d;p?q', 'g;x?y#s', 'http://a/bb/g;x?y#s'); itShouldResolve('http://a/bb/ccc/../d;p?q', '', 'http://a/bb/ccc/../d;p?q'); itShouldResolve('http://a/bb/ccc/../d;p?q', '.', 'http://a/bb/'); itShouldResolve('http://a/bb/ccc/../d;p?q', './', 'http://a/bb/'); itShouldResolve('http://a/bb/ccc/../d;p?q', '..', 'http://a/'); itShouldResolve('http://a/bb/ccc/../d;p?q', '../', 'http://a/'); itShouldResolve('http://a/bb/ccc/../d;p?q', '../g', 'http://a/g'); itShouldResolve('http://a/bb/ccc/../d;p?q', '../..', 'http://a/'); itShouldResolve('http://a/bb/ccc/../d;p?q', '../../', 'http://a/'); itShouldResolve('http://a/bb/ccc/../d;p?q', '../../g', 'http://a/g'); }); describe('RFC3986 abnormal examples with /.. in the base IRI', () => { itShouldResolve('http://a/bb/ccc/../d;p?q', '../../../g', 'http://a/g'); itShouldResolve('http://a/bb/ccc/../d;p?q', '../../../../g', 'http://a/g'); itShouldResolve('http://a/bb/ccc/../d;p?q', '/./g', 'http://a/g'); itShouldResolve('http://a/bb/ccc/../d;p?q', '/../g', 'http://a/g'); itShouldResolve('http://a/bb/ccc/../d;p?q', 'g.', 'http://a/bb/g.'); itShouldResolve('http://a/bb/ccc/../d;p?q', '.g', 'http://a/bb/.g'); itShouldResolve('http://a/bb/ccc/../d;p?q', 'g..', 'http://a/bb/g..'); itShouldResolve('http://a/bb/ccc/../d;p?q', '..g', 'http://a/bb/..g'); itShouldResolve('http://a/bb/ccc/../d;p?q', './../g', 'http://a/g'); itShouldResolve('http://a/bb/ccc/../d;p?q', './g/.', 'http://a/bb/g/'); itShouldResolve('http://a/bb/ccc/../d;p?q', 'g/./h', 'http://a/bb/g/h'); itShouldResolve('http://a/bb/ccc/../d;p?q', 'g/../h', 'http://a/bb/h'); itShouldResolve('http://a/bb/ccc/../d;p?q', 'g;x=1/./y', 'http://a/bb/g;x=1/y'); itShouldResolve('http://a/bb/ccc/../d;p?q', 'g;x=1/../y', 'http://a/bb/y'); itShouldResolve('http://a/bb/ccc/../d;p?q', 'g?y/./x', 'http://a/bb/g?y/./x'); itShouldResolve('http://a/bb/ccc/../d;p?q', 'g?y/../x', 'http://a/bb/g?y/../x'); itShouldResolve('http://a/bb/ccc/../d;p?q', 'g#s/./x', 'http://a/bb/g#s/./x'); itShouldResolve('http://a/bb/ccc/../d;p?q', 'g#s/../x', 'http://a/bb/g#s/../x'); itShouldResolve('http://a/bb/ccc/../d;p?q', 'http:g', 'http:g'); }); describe('RFC3986 normal examples with trailing /. in the base IRI', () => { itShouldResolve('http://a/bb/ccc/.', 'g:h', 'g:h'); itShouldResolve('http://a/bb/ccc/.', 'g', 'http://a/bb/ccc/g'); itShouldResolve('http://a/bb/ccc/.', './g', 'http://a/bb/ccc/g'); itShouldResolve('http://a/bb/ccc/.', 'g/', 'http://a/bb/ccc/g/'); itShouldResolve('http://a/bb/ccc/.', '/g', 'http://a/g'); itShouldResolve('http://a/bb/ccc/.', '//g', 'http://g'); itShouldResolve('http://a/bb/ccc/.', '?y', 'http://a/bb/ccc/.?y'); itShouldResolve('http://a/bb/ccc/.', 'g?y', 'http://a/bb/ccc/g?y'); itShouldResolve('http://a/bb/ccc/.', '#s', 'http://a/bb/ccc/.#s'); itShouldResolve('http://a/bb/ccc/.', 'g#s', 'http://a/bb/ccc/g#s'); itShouldResolve('http://a/bb/ccc/.', 'g?y#s', 'http://a/bb/ccc/g?y#s'); itShouldResolve('http://a/bb/ccc/.', ';x', 'http://a/bb/ccc/;x'); itShouldResolve('http://a/bb/ccc/.', 'g;x', 'http://a/bb/ccc/g;x'); itShouldResolve('http://a/bb/ccc/.', 'g;x?y#s', 'http://a/bb/ccc/g;x?y#s'); itShouldResolve('http://a/bb/ccc/.', '', 'http://a/bb/ccc/.'); itShouldResolve('http://a/bb/ccc/.', '.', 'http://a/bb/ccc/'); itShouldResolve('http://a/bb/ccc/.', './', 'http://a/bb/ccc/'); itShouldResolve('http://a/bb/ccc/.', '..', 'http://a/bb/'); itShouldResolve('http://a/bb/ccc/.', '../', 'http://a/bb/'); itShouldResolve('http://a/bb/ccc/.', '../g', 'http://a/bb/g'); itShouldResolve('http://a/bb/ccc/.', '../..', 'http://a/'); itShouldResolve('http://a/bb/ccc/.', '../../', 'http://a/'); itShouldResolve('http://a/bb/ccc/.', '../../g', 'http://a/g'); }); describe('RFC3986 abnormal examples with trailing /. in the base IRI', () => { itShouldResolve('http://a/bb/ccc/.', '../../../g', 'http://a/g'); itShouldResolve('http://a/bb/ccc/.', '../../../../g', 'http://a/g'); itShouldResolve('http://a/bb/ccc/.', '/./g', 'http://a/g'); itShouldResolve('http://a/bb/ccc/.', '/../g', 'http://a/g'); itShouldResolve('http://a/bb/ccc/.', 'g.', 'http://a/bb/ccc/g.'); itShouldResolve('http://a/bb/ccc/.', '.g', 'http://a/bb/ccc/.g'); itShouldResolve('http://a/bb/ccc/.', 'g..', 'http://a/bb/ccc/g..'); itShouldResolve('http://a/bb/ccc/.', '..g', 'http://a/bb/ccc/..g'); itShouldResolve('http://a/bb/ccc/.', './../g', 'http://a/bb/g'); itShouldResolve('http://a/bb/ccc/.', './g/.', 'http://a/bb/ccc/g/'); itShouldResolve('http://a/bb/ccc/.', 'g/./h', 'http://a/bb/ccc/g/h'); itShouldResolve('http://a/bb/ccc/.', 'g/../h', 'http://a/bb/ccc/h'); itShouldResolve('http://a/bb/ccc/.', 'g;x=1/./y', 'http://a/bb/ccc/g;x=1/y'); itShouldResolve('http://a/bb/ccc/.', 'g;x=1/../y', 'http://a/bb/ccc/y'); itShouldResolve('http://a/bb/ccc/.', 'g?y/./x', 'http://a/bb/ccc/g?y/./x'); itShouldResolve('http://a/bb/ccc/.', 'g?y/../x', 'http://a/bb/ccc/g?y/../x'); itShouldResolve('http://a/bb/ccc/.', 'g#s/./x', 'http://a/bb/ccc/g#s/./x'); itShouldResolve('http://a/bb/ccc/.', 'g#s/../x', 'http://a/bb/ccc/g#s/../x'); itShouldResolve('http://a/bb/ccc/.', 'http:g', 'http:g'); }); describe('RFC3986 normal examples with trailing /.. in the base IRI', () => { itShouldResolve('http://a/bb/ccc/..', 'g:h', 'g:h'); itShouldResolve('http://a/bb/ccc/..', 'g', 'http://a/bb/ccc/g'); itShouldResolve('http://a/bb/ccc/..', './g', 'http://a/bb/ccc/g'); itShouldResolve('http://a/bb/ccc/..', 'g/', 'http://a/bb/ccc/g/'); itShouldResolve('http://a/bb/ccc/..', '/g', 'http://a/g'); itShouldResolve('http://a/bb/ccc/..', '//g', 'http://g'); itShouldResolve('http://a/bb/ccc/..', '?y', 'http://a/bb/ccc/..?y'); itShouldResolve('http://a/bb/ccc/..', 'g?y', 'http://a/bb/ccc/g?y'); itShouldResolve('http://a/bb/ccc/..', '#s', 'http://a/bb/ccc/..#s'); itShouldResolve('http://a/bb/ccc/..', 'g#s', 'http://a/bb/ccc/g#s'); itShouldResolve('http://a/bb/ccc/..', 'g?y#s', 'http://a/bb/ccc/g?y#s'); itShouldResolve('http://a/bb/ccc/..', ';x', 'http://a/bb/ccc/;x'); itShouldResolve('http://a/bb/ccc/..', 'g;x', 'http://a/bb/ccc/g;x'); itShouldResolve('http://a/bb/ccc/..', 'g;x?y#s', 'http://a/bb/ccc/g;x?y#s'); itShouldResolve('http://a/bb/ccc/..', '', 'http://a/bb/ccc/..'); itShouldResolve('http://a/bb/ccc/..', '.', 'http://a/bb/ccc/'); itShouldResolve('http://a/bb/ccc/..', './', 'http://a/bb/ccc/'); itShouldResolve('http://a/bb/ccc/..', '..', 'http://a/bb/'); itShouldResolve('http://a/bb/ccc/..', '../', 'http://a/bb/'); itShouldResolve('http://a/bb/ccc/..', '../g', 'http://a/bb/g'); itShouldResolve('http://a/bb/ccc/..', '../..', 'http://a/'); itShouldResolve('http://a/bb/ccc/..', '../../', 'http://a/'); itShouldResolve('http://a/bb/ccc/..', '../../g', 'http://a/g'); }); describe('RFC3986 abnormal examples with trailing /.. in the base IRI', () => { itShouldResolve('http://a/bb/ccc/..', '../../../g', 'http://a/g'); itShouldResolve('http://a/bb/ccc/..', '../../../../g', 'http://a/g'); itShouldResolve('http://a/bb/ccc/..', '/./g', 'http://a/g'); itShouldResolve('http://a/bb/ccc/..', '/../g', 'http://a/g'); itShouldResolve('http://a/bb/ccc/..', 'g.', 'http://a/bb/ccc/g.'); itShouldResolve('http://a/bb/ccc/..', '.g', 'http://a/bb/ccc/.g'); itShouldResolve('http://a/bb/ccc/..', 'g..', 'http://a/bb/ccc/g..'); itShouldResolve('http://a/bb/ccc/..', '..g', 'http://a/bb/ccc/..g'); itShouldResolve('http://a/bb/ccc/..', './../g', 'http://a/bb/g'); itShouldResolve('http://a/bb/ccc/..', './g/.', 'http://a/bb/ccc/g/'); itShouldResolve('http://a/bb/ccc/..', 'g/./h', 'http://a/bb/ccc/g/h'); itShouldResolve('http://a/bb/ccc/..', 'g/../h', 'http://a/bb/ccc/h'); itShouldResolve('http://a/bb/ccc/..', 'g;x=1/./y', 'http://a/bb/ccc/g;x=1/y'); itShouldResolve('http://a/bb/ccc/..', 'g;x=1/../y', 'http://a/bb/ccc/y'); itShouldResolve('http://a/bb/ccc/..', 'g?y/./x', 'http://a/bb/ccc/g?y/./x'); itShouldResolve('http://a/bb/ccc/..', 'g?y/../x', 'http://a/bb/ccc/g?y/../x'); itShouldResolve('http://a/bb/ccc/..', 'g#s/./x', 'http://a/bb/ccc/g#s/./x'); itShouldResolve('http://a/bb/ccc/..', 'g#s/../x', 'http://a/bb/ccc/g#s/../x'); itShouldResolve('http://a/bb/ccc/..', 'http:g', 'http:g'); }); describe('RFC3986 normal examples with fragment in base IRI', () => { itShouldResolve('http://a/bb/ccc/d;p?q#f', 'g:h', 'g:h'); itShouldResolve('http://a/bb/ccc/d;p?q#f', 'g', 'http://a/bb/ccc/g'); itShouldResolve('http://a/bb/ccc/d;p?q#f', './g', 'http://a/bb/ccc/g'); itShouldResolve('http://a/bb/ccc/d;p?q#f', 'g/', 'http://a/bb/ccc/g/'); itShouldResolve('http://a/bb/ccc/d;p?q#f', '/g', 'http://a/g'); itShouldResolve('http://a/bb/ccc/d;p?q#f', '//g', 'http://g'); itShouldResolve('http://a/bb/ccc/d;p?q#f', '?y', 'http://a/bb/ccc/d;p?y'); itShouldResolve('http://a/bb/ccc/d;p?q#f', 'g?y', 'http://a/bb/ccc/g?y'); itShouldResolve('http://a/bb/ccc/d;p?q#f', '#s', 'http://a/bb/ccc/d;p?q#s'); itShouldResolve('http://a/bb/ccc/d;p?q#f', 'g#s', 'http://a/bb/ccc/g#s'); itShouldResolve('http://a/bb/ccc/d;p?q#f', 'g?y#s', 'http://a/bb/ccc/g?y#s'); itShouldResolve('http://a/bb/ccc/d;p?q#f', ';x', 'http://a/bb/ccc/;x'); itShouldResolve('http://a/bb/ccc/d;p?q#f', 'g;x', 'http://a/bb/ccc/g;x'); itShouldResolve('http://a/bb/ccc/d;p?q#f', 'g;x?y#s', 'http://a/bb/ccc/g;x?y#s'); itShouldResolve('http://a/bb/ccc/d;p?q#f', '', 'http://a/bb/ccc/d;p?q'); itShouldResolve('http://a/bb/ccc/d;p?q#f', '.', 'http://a/bb/ccc/'); itShouldResolve('http://a/bb/ccc/d;p?q#f', './', 'http://a/bb/ccc/'); itShouldResolve('http://a/bb/ccc/d;p?q#f', '..', 'http://a/bb/'); itShouldResolve('http://a/bb/ccc/d;p?q#f', '../', 'http://a/bb/'); itShouldResolve('http://a/bb/ccc/d;p?q#f', '../g', 'http://a/bb/g'); itShouldResolve('http://a/bb/ccc/d;p?q#f', '../..', 'http://a/'); itShouldResolve('http://a/bb/ccc/d;p?q#f', '../../', 'http://a/'); itShouldResolve('http://a/bb/ccc/d;p?q#f', '../../g', 'http://a/g'); }); describe('RFC3986 abnormal examples with fragment in base IRI', () => { itShouldResolve('http://a/bb/ccc/d;p?q#f', '../../../g', 'http://a/g'); itShouldResolve('http://a/bb/ccc/d;p?q#f', '../../../../g', 'http://a/g'); itShouldResolve('http://a/bb/ccc/d;p?q#f', '/./g', 'http://a/g'); itShouldResolve('http://a/bb/ccc/d;p?q#f', '/../g', 'http://a/g'); itShouldResolve('http://a/bb/ccc/d;p?q#f', 'g.', 'http://a/bb/ccc/g.'); itShouldResolve('http://a/bb/ccc/d;p?q#f', '.g', 'http://a/bb/ccc/.g'); itShouldResolve('http://a/bb/ccc/d;p?q#f', 'g..', 'http://a/bb/ccc/g..'); itShouldResolve('http://a/bb/ccc/d;p?q#f', '..g', 'http://a/bb/ccc/..g'); itShouldResolve('http://a/bb/ccc/d;p?q#f', './../g', 'http://a/bb/g'); itShouldResolve('http://a/bb/ccc/d;p?q#f', './g/.', 'http://a/bb/ccc/g/'); itShouldResolve('http://a/bb/ccc/d;p?q#f', 'g/./h', 'http://a/bb/ccc/g/h'); itShouldResolve('http://a/bb/ccc/d;p?q#f', 'g/../h', 'http://a/bb/ccc/h'); itShouldResolve('http://a/bb/ccc/d;p?q#f', 'g;x=1/./y', 'http://a/bb/ccc/g;x=1/y'); itShouldResolve('http://a/bb/ccc/d;p?q#f', 'g;x=1/../y', 'http://a/bb/ccc/y'); itShouldResolve('http://a/bb/ccc/d;p?q#f', 'g?y/./x', 'http://a/bb/ccc/g?y/./x'); itShouldResolve('http://a/bb/ccc/d;p?q#f', 'g?y/../x', 'http://a/bb/ccc/g?y/../x'); itShouldResolve('http://a/bb/ccc/d;p?q#f', 'g#s/./x', 'http://a/bb/ccc/g#s/./x'); itShouldResolve('http://a/bb/ccc/d;p?q#f', 'g#s/../x', 'http://a/bb/ccc/g#s/../x'); itShouldResolve('http://a/bb/ccc/d;p?q#f', 'http:g', 'http:g'); }); describe('RFC3986 normal examples with file path', () => { itShouldResolve('file:///a/bb/ccc/d;p?q', 'g:h', 'g:h'); itShouldResolve('file:///a/bb/ccc/d;p?q', 'g', 'file:///a/bb/ccc/g'); itShouldResolve('file:///a/bb/ccc/d;p?q', './g', 'file:///a/bb/ccc/g'); itShouldResolve('file:///a/bb/ccc/d;p?q', 'g/', 'file:///a/bb/ccc/g/'); itShouldResolve('file:///a/bb/ccc/d;p?q', '/g', 'file:///g'); itShouldResolve('file:///a/bb/ccc/d;p?q', '//g', 'file://g'); itShouldResolve('file:///a/bb/ccc/d;p?q', '?y', 'file:///a/bb/ccc/d;p?y'); itShouldResolve('file:///a/bb/ccc/d;p?q', 'g?y', 'file:///a/bb/ccc/g?y'); itShouldResolve('file:///a/bb/ccc/d;p?q', '#s', 'file:///a/bb/ccc/d;p?q#s'); itShouldResolve('file:///a/bb/ccc/d;p?q', 'g#s', 'file:///a/bb/ccc/g#s'); itShouldResolve('file:///a/bb/ccc/d;p?q', 'g?y#s', 'file:///a/bb/ccc/g?y#s'); itShouldResolve('file:///a/bb/ccc/d;p?q', ';x', 'file:///a/bb/ccc/;x'); itShouldResolve('file:///a/bb/ccc/d;p?q', 'g;x', 'file:///a/bb/ccc/g;x'); itShouldResolve('file:///a/bb/ccc/d;p?q', 'g;x?y#s', 'file:///a/bb/ccc/g;x?y#s'); itShouldResolve('file:///a/bb/ccc/d;p?q', '', 'file:///a/bb/ccc/d;p?q'); itShouldResolve('file:///a/bb/ccc/d;p?q', '.', 'file:///a/bb/ccc/'); itShouldResolve('file:///a/bb/ccc/d;p?q', './', 'file:///a/bb/ccc/'); itShouldResolve('file:///a/bb/ccc/d;p?q', '..', 'file:///a/bb/'); itShouldResolve('file:///a/bb/ccc/d;p?q', '../', 'file:///a/bb/'); itShouldResolve('file:///a/bb/ccc/d;p?q', '../g', 'file:///a/bb/g'); itShouldResolve('file:///a/bb/ccc/d;p?q', '../..', 'file:///a/'); itShouldResolve('file:///a/bb/ccc/d;p?q', '../../', 'file:///a/'); itShouldResolve('file:///a/bb/ccc/d;p?q', '../../g', 'file:///a/g'); }); describe('RFC3986 abnormal examples with file path', () => { itShouldResolve('file:///a/bb/ccc/d;p?q', '../../../g', 'file:///g'); itShouldResolve('file:///a/bb/ccc/d;p?q', '../../../../g', 'file:///g'); itShouldResolve('file:///a/bb/ccc/d;p?q', '/./g', 'file:///g'); itShouldResolve('file:///a/bb/ccc/d;p?q', '/../g', 'file:///g'); itShouldResolve('file:///a/bb/ccc/d;p?q', 'g.', 'file:///a/bb/ccc/g.'); itShouldResolve('file:///a/bb/ccc/d;p?q', '.g', 'file:///a/bb/ccc/.g'); itShouldResolve('file:///a/bb/ccc/d;p?q', 'g..', 'file:///a/bb/ccc/g..'); itShouldResolve('file:///a/bb/ccc/d;p?q', '..g', 'file:///a/bb/ccc/..g'); itShouldResolve('file:///a/bb/ccc/d;p?q', './../g', 'file:///a/bb/g'); itShouldResolve('file:///a/bb/ccc/d;p?q', './g/.', 'file:///a/bb/ccc/g/'); itShouldResolve('file:///a/bb/ccc/d;p?q', 'g/./h', 'file:///a/bb/ccc/g/h'); itShouldResolve('file:///a/bb/ccc/d;p?q', 'g/../h', 'file:///a/bb/ccc/h'); itShouldResolve('file:///a/bb/ccc/d;p?q', 'g;x=1/./y', 'file:///a/bb/ccc/g;x=1/y'); itShouldResolve('file:///a/bb/ccc/d;p?q', 'g;x=1/../y', 'file:///a/bb/ccc/y'); itShouldResolve('file:///a/bb/ccc/d;p?q', 'g?y/./x', 'file:///a/bb/ccc/g?y/./x'); itShouldResolve('file:///a/bb/ccc/d;p?q', 'g?y/../x', 'file:///a/bb/ccc/g?y/../x'); itShouldResolve('file:///a/bb/ccc/d;p?q', 'g#s/./x', 'file:///a/bb/ccc/g#s/./x'); itShouldResolve('file:///a/bb/ccc/d;p?q', 'g#s/../x', 'file:///a/bb/ccc/g#s/../x'); itShouldResolve('file:///a/bb/ccc/d;p?q', 'http:g', 'http:g'); }); describe('additional cases', () => { // relative paths ending with '.' itShouldResolve('http://abc/', '.', 'http://abc/'); itShouldResolve('http://abc/def/ghi', '.', 'http://abc/def/'); itShouldResolve('http://abc/def/ghi', '.?a=b', 'http://abc/def/?a=b'); itShouldResolve('http://abc/def/ghi', '.#a=b', 'http://abc/def/#a=b'); // relative paths ending with '..' itShouldResolve('http://abc/', '..', 'http://abc/'); itShouldResolve('http://abc/def/ghi', '..', 'http://abc/'); itShouldResolve('http://abc/def/ghi', '..?a=b', 'http://abc/?a=b'); itShouldResolve('http://abc/def/ghi', '..#a=b', 'http://abc/#a=b'); // base path with empty subpaths (double slashes) itShouldResolve('http://ab//de//ghi', 'xyz', 'http://ab//de//xyz'); itShouldResolve('http://ab//de//ghi', './xyz', 'http://ab//de//xyz'); itShouldResolve('http://ab//de//ghi', '../xyz', 'http://ab//de/xyz'); // base path with colon (possible confusion with scheme) itShouldResolve('http://abc/d:f/ghi', 'xyz', 'http://abc/d:f/xyz'); itShouldResolve('http://abc/d:f/ghi', './xyz', 'http://abc/d:f/xyz'); itShouldResolve('http://abc/d:f/ghi', '../xyz', 'http://abc/xyz'); // base path consisting of '..' and/or '../' sequences itShouldResolve('./', 'abc', '/abc'); itShouldResolve('../', 'abc', '/abc'); itShouldResolve('./././', '././abc', '/abc'); itShouldResolve('../../../', '../../abc', '/abc'); itShouldResolve('.../././', '././abc', '.../abc'); // base path without authority itShouldResolve('a:b:c/', 'def/../', 'a:b:c/'); itShouldResolve('a:b:c', '/def', 'a:/def'); itShouldResolve('a:b/c', '/def', 'a:/def'); itShouldResolve('a:', '/.', 'a:/'); itShouldResolve('a:', '/..', 'a:/'); // base path with slashes in query string itShouldResolve('http://abc/def/ghi?q=xx/yyy/z', 'jjj', 'http://abc/def/jjj'); itShouldResolve('http://abc/def/ghi?q=xx/y?y/z', 'jjj', 'http://abc/def/jjj'); }); }); }); function shouldParse(parser, input) { const expected = Array.prototype.slice.call(arguments, 1); // Shift parameters as necessary if (parser.call) expected.shift(); else input = parser, parser = Parser; return function (done) { const results = []; const items = expected.map(mapToQuad); new parser({ baseIRI: BASE_IRI }).parse(input, (error, triple) => { expect(error).not.to.exist; if (triple) results.push(triple); else toSortedJSON(results).should.equal(toSortedJSON(items)), done(); }); }; } function mapToQuad(item) { item = item.map(t => { // don't touch if it's already an object if (typeof t === 'object') // recursively map content if it's an array return (t instanceof Array) ? mapToQuad(t) : t; // Append base to relative IRIs else if (!/^$|^["?]|:/.test(t)) t = BASE_IRI + t; return termFromId(t); }); return new Quad(item[0], item[1], item[2], item[3]); } function toSortedJSON(triples) { triples = triples.map(t => { return JSON.stringify([ t.subject.toJSON(), t.predicate.toJSON(), t.object.toJSON(), t.graph.toJSON(), ]); }); triples.sort(); return `[\n ${triples.join('\n ')}\n]`; } function shouldNotParse(parser, input, expectedError, expectedContext) { // Shift parameters if necessary if (!parser.call) expectedContext = expectedError, expectedError = input, input = parser, parser = Parser; return function (done) { new parser({ baseIRI: BASE_IRI }).parse(input, (error, triple) => { if (error) { expect(triple).not.to.exist; error.should.be.an.instanceof(Error); error.message.should.eql(expectedError); if (expectedContext) error.context.should.deep.equal(expectedContext); done(); } else if (!triple) done(new Error(`Expected error ${expectedError}`)); }); }; } function itShouldResolve(baseIRI, relativeIri, expected) { let result; describe(`resolving <${relativeIri}> against <${baseIRI}>`, () => { before(done => { try { const doc = ` <${relativeIri}>.`; new Parser({ baseIRI }).parse(doc, (error, triple) => { if (done) result = triple, done(error); done = null; }); } catch (error) { done(error); } }); it(`should result in ${expected}`, () => { expect(result.object.value).to.equal(expected); }); }); } N3.js-1.16.3/test/N3Store-test.js000066400000000000000000002201111433366257500162770ustar00rootroot00000000000000import { Store, NamedNode, Literal, DefaultGraph, Quad, termFromId, termToId, } from '../src/'; import namespaces from '../src/IRIs'; import chai, { expect } from 'chai'; import { Readable } from 'readable-stream'; import arrayifyStream from 'arrayify-stream'; const should = chai.should(); describe('Store', () => { describe('The Store export', () => { it('should be a function', () => { Store.should.be.a('function'); }); it('should be an Store constructor', () => { new Store().should.be.an.instanceof(Store); }); }); describe('An empty Store', () => { const store = new Store({}); it('should have size 0', () => { expect(store.size).to.eql(0); }); it('should be empty', () => { store.getQuads().should.be.empty; }); describe('when importing a stream of 2 quads', () => { before(done => { const stream = new ArrayReader([ new Quad(new NamedNode('s1'), new NamedNode('p2'), new NamedNode('o2')), new Quad(new NamedNode('s1'), new NamedNode('p1'), new NamedNode('o1')), ]); const events = store.import(stream); events.on('end', done); }); it('should have size 2', () => { store.size.should.eql(2); }); }); describe('when removing a stream of 2 quads', () => { before(done => { const stream = new ArrayReader([ new Quad(new NamedNode('s1'), new NamedNode('p2'), new NamedNode('o2')), new Quad(new NamedNode('s1'), new NamedNode('p1'), new NamedNode('o1')), ]); const events = store.remove(stream); events.on('end', done); }); it('should have size 0', () => { store.size.should.eql(0); }); }); describe('when importing a stream of 2 nested quads', () => { before(done => { const stream = new ArrayReader([ new Quad(new Quad(new NamedNode('s1'), new NamedNode('p2'), new NamedNode('o2')), new NamedNode('p2'), new NamedNode('o2')), new Quad(new NamedNode('s1'), new NamedNode('p1'), new Quad(new NamedNode('s1'), new NamedNode('p2'), new NamedNode('o2'))), ]); const events = store.import(stream); events.on('end', done); }); it('should have size 2', () => { store.size.should.eql(2); }); }); describe('when removing a stream of 2 nested quads', () => { before(done => { const stream = new ArrayReader([ new Quad(new Quad(new NamedNode('s1'), new NamedNode('p2'), new NamedNode('o2')), new NamedNode('p2'), new NamedNode('o2')), new Quad(new NamedNode('s1'), new NamedNode('p1'), new Quad(new NamedNode('s1'), new NamedNode('p2'), new NamedNode('o2'))), ]); const events = store.remove(stream); events.on('end', done); }); it('should have size 0', () => { store.size.should.eql(0); }); }); describe('every', () => { describe('with no parameters and a callback always returning true', () => { it('should return false', () => { store.every(alwaysTrue, null, null, null, null).should.be.false; }); }); describe('with no parameters and a callback always returning false', () => { it('should return false', () => { store.every(alwaysFalse, null, null, null, null).should.be.false; }); }); }); describe('some', () => { describe('with no parameters and a callback always returning true', () => { it('should return false', () => { store.some(alwaysTrue, null, null, null, null).should.be.false; }); }); describe('with no parameters and a callback always returning false', () => { it('should return false', () => { store.some(alwaysFalse, null, null, null, null).should.be.false; }); }); }); it('should still have size 0 (instead of null) after adding and removing a triple', () => { expect(store.size).to.eql(0); store.addQuad(new NamedNode('a'), new NamedNode('b'), new NamedNode('c')).should.be.true; store.removeQuad(new NamedNode('a'), new NamedNode('b'), new NamedNode('c')).should.be.true; expect(store.size).to.eql(0); }); it('should be able to generate unnamed blank nodes', () => { store.createBlankNode().value.should.eql('b0'); store.createBlankNode().value.should.eql('b1'); store.addQuad('_:b0', '_:b1', '_:b2').should.be.true; store.createBlankNode().value.should.eql('b3'); store.removeQuads(store.getQuads()); }); it('should be able to generate named blank nodes', () => { store.createBlankNode('blank').value.should.eql('blank'); store.createBlankNode('blank').value.should.eql('blank1'); store.createBlankNode('blank').value.should.eql('blank2'); }); it('should be able to store triples with generated blank nodes', () => { store.addQuad(store.createBlankNode('x'), new NamedNode('b'), new NamedNode('c')).should.be.true; shouldIncludeAll(store.getQuads(null, new NamedNode('b')), ['_:x', 'b', 'c'])(); store.removeQuads(store.getQuads()); }); }); describe('A Store with initialized with 5 elements', () => { const store = new Store([ new Quad(new Quad(new NamedNode('s1'), new NamedNode('p1'), new NamedNode('o1')), new NamedNode('p1'), new NamedNode('o1')), new Quad(new NamedNode('s1'), new NamedNode('p1'), new NamedNode('o1')), new Quad(new NamedNode('s1'), new NamedNode('p1'), new NamedNode('o2')), new Quad(new NamedNode('s1'), new NamedNode('p1'), new NamedNode('o3')), new Quad(new NamedNode('s2'), new NamedNode('p2'), new NamedNode('o2'), new NamedNode('g1')), ]); it('should have size 5', () => { store.size.should.eql(5); }); describe('adding a triple that already exists', () => { it('should return false', () => { store.addQuad('s1', 'p1', 'o1').should.be.false; }); it('should not increase the size', () => { store.size.should.eql(5); }); it('should return false', () => { store.addQuad(new Quad('s1', 'p1', 'o1'), 'p1', 'o1').should.be.false; }); it('should not increase the size', () => { store.size.should.eql(5); }); }); describe('adding a triple that did not exist yet', () => { it('should return true', () => { store.has(new Quad(new NamedNode('s1'), new NamedNode('p1'), new NamedNode('o4'))).should.be.false; store.has(new NamedNode('s1'), new NamedNode('p1'), new NamedNode('o4')).should.be.false; store.has(null, null, new NamedNode('o4')).should.be.false; store.addQuad('s1', 'p1', 'o4').should.be.true; store.has(new Quad(new NamedNode('s1'), new NamedNode('p1'), new NamedNode('o4'))).should.be.true; store.has(new NamedNode('s1'), new NamedNode('p1'), new NamedNode('o4')).should.be.true; store.has(new NamedNode('s1'), new NamedNode('p1'), new NamedNode('o4'), new DefaultGraph()).should.be.true; store.has(null, null, new NamedNode('o4')).should.be.true; }); it('should increase the size', () => { store.size.should.eql(6); }); it('should return true', () => { store.addQuad(new Quad(new NamedNode('s1'), new NamedNode('p1'), new NamedNode('o1')), 'p1', 'o4').should.be.true; }); it('should increase the size', () => { store.size.should.eql(7); }); it('should return self', () => { should.equal(store.add(new Quad(new NamedNode('s2'), new NamedNode('p2'), new NamedNode('o2'))), store); }); it('should increase the size', () => { store.size.should.eql(8); }); }); describe('removing an existing triple', () => { it('should return true', () => { store.removeQuad('s1', 'p1', 'o4').should.be.true; }); it('should decrease the size', () => { store.size.should.eql(7); }); it('should return true', () => { store.removeQuad(new Quad(new NamedNode('s1'), new NamedNode('p1'), new NamedNode('o1')), 'p1', 'o4').should.be.true; }); it('should decrease the size', () => { store.size.should.eql(6); }); it('should return self', () => { should.equal(store.delete(new Quad(new NamedNode('s2'), new NamedNode('p2'), new NamedNode('o2'))), store); }); it('should increase the size', () => { store.size.should.eql(5); }); }); describe('removing a non-existing triple', () => { it('should return false', () => { store.removeQuad('s1', 'p1', 'o5').should.be.false; }); it('should not decrease the size', () => { store.size.should.eql(5); }); it('should return false', () => { store.removeQuad(new Quad(new NamedNode('s1'), new NamedNode('p1'), new NamedNode('o4')), 'p1', 'o1').should.be.false; }); it('should not decrease the size', () => { store.size.should.eql(5); }); }); describe('removing matching quads', () => { it('should return the removed quads', forResultStream(shouldIncludeAll, () => { return store.removeMatches('s1', 'p1'); }, ['s1', 'p1', 'o1'], ['s1', 'p1', 'o2'], ['s1', 'p1', 'o3'])); it('should decrease the size', () => { store.size.should.eql(2); }); }); describe('removing a graph', () => { it('should return the removed quads', forResultStream(shouldIncludeAll, () => { return store.deleteGraph('g1'); }, ['s2', 'p2', 'o2', 'g1'])); it('should decrease the size', () => { store.size.should.eql(1); }); }); }); describe('removing matching quads for RDF*', () => { let store; beforeEach(() => { store = new Store([ new Quad(new Quad(new NamedNode('s1'), new NamedNode('p1'), new NamedNode('o1')), new NamedNode('p2'), new NamedNode('o1')), new Quad(new Quad(new NamedNode('s1'), new NamedNode('p1'), new NamedNode('o1')), new NamedNode('p1'), new NamedNode('o1')), new Quad(new Quad(new NamedNode('s1'), new NamedNode('p1'), new NamedNode('o1')), new NamedNode('p2'), new NamedNode('o2')), new Quad(new Quad(new NamedNode('s1'), new NamedNode('p1'), new NamedNode('o1')), new NamedNode('p1'), new NamedNode('o2')), new Quad(new NamedNode('s1'), new NamedNode('p1'), new NamedNode('o2')), ]); }); it('should return the removed quads', forResultStream(shouldIncludeAll, () => { return store.removeMatches(null, 'p2', 'o2'); }, [termToId(new Quad(new NamedNode('s1'), new NamedNode('p1'), new NamedNode('o1'))), 'p2', 'o2'])); it('should decrease the size', () => { store.size.should.eql(5); }); it('should match RDF* and normal quads at the same time', done => { const stream = store.removeMatches(null, 'p1', 'o2'); stream.on('end', () => { store.size.should.eql(3); done(); }); }); it('should allow matching using a quad', done => { const stream = store.removeMatches(termToId(new Quad(new NamedNode('s1'), new NamedNode('p1'), new NamedNode('o1')))); stream.on('end', () => { store.size.should.eql(1); done(); }); }); }); describe('A Store with 7 elements', () => { const store = new Store(); store.addQuad('s1', 'p1', 'o1').should.be.true; store.addQuad({ subject: 's1', predicate: 'p1', object: 'o2' }).should.be.true; store.addQuads([ { subject: 's1', predicate: 'p2', object: 'o2' }, { subject: 's2', predicate: 'p1', object: 'o1' }, ]); store.addQuad('s1', 'p1', 'o1', 'c4').should.be.true; store.addQuad(new Quad('s2', 'p2', 'o2'), 'p1', 'o3'); should.equal(store.add(new Quad('s2', 'p2', 'o2')), store); it('should have size 7', () => { store.size.should.eql(7); }); describe('when searched without parameters', () => { it('should return all items', shouldIncludeAll(store.getQuads(), ['s1', 'p1', 'o1'], ['s1', 'p1', 'o2'], ['s1', 'p2', 'o2'], ['s2', 'p1', 'o1'], ['s1', 'p1', 'o1', 'c4'], [termToId(new Quad('s2', 'p2', 'o2')), 'p1', 'o3'], ['s2', 'p2', 'o2'])); }); describe('when searched with an existing subject parameter', () => { it('should return all items with this subject in all graphs', shouldIncludeAll(store.getQuads(new NamedNode('s1'), null, null), ['s1', 'p1', 'o1'], ['s1', 'p1', 'o2'], ['s1', 'p2', 'o2'], ['s1', 'p1', 'o1', 'c4'])); }); describe('when searched with a non-existing subject parameter', () => { itShouldBeEmpty(store.getQuads(new NamedNode('s3'), null, null)); }); describe('when searched with a non-existing subject parameter that exists elsewhere', () => { itShouldBeEmpty(store.getQuads(new NamedNode('p1'), null, null)); }); describe('when searched with an existing predicate parameter', () => { it('should return all items with this predicate in all graphs', shouldIncludeAll(store.getQuads(null, new NamedNode('p1'), null), ['s1', 'p1', 'o1'], ['s1', 'p1', 'o2'], ['s2', 'p1', 'o1'], ['s1', 'p1', 'o1', 'c4'], [termToId(new Quad('s2', 'p2', 'o2')), 'p1', 'o3'])); }); describe('when searched with a non-existing predicate parameter', () => { itShouldBeEmpty(store.getQuads(null, new NamedNode('p3'), null)); }); describe('when searched with an existing object parameter', () => { it('should return all items with this object in all graphs', shouldIncludeAll(store.getQuads(null, null, new NamedNode('o1')), ['s1', 'p1', 'o1'], ['s2', 'p1', 'o1'], ['s1', 'p1', 'o1', 'c4'])); }); describe('when searched with a non-existing object parameter', () => { itShouldBeEmpty(store.getQuads(null, null, new NamedNode('o4'))); }); describe('when searched with existing subject and predicate parameters', () => { it('should return all items with this subject and predicate in all graphs', shouldIncludeAll(store.getQuads(new NamedNode('s1'), new NamedNode('p1'), null), ['s1', 'p1', 'o1'], ['s1', 'p1', 'o2'], ['s1', 'p1', 'o1', 'c4'])); }); describe('when searched with non-existing subject and predicate parameters', () => { itShouldBeEmpty(store.getQuads(new NamedNode('s2'), new NamedNode('p3'), null)); }); describe('when searched with existing subject and object parameters', () => { it('should return all items with this subject and object in all graphs', shouldIncludeAll(store.getQuads(new NamedNode('s1'), null, new NamedNode('o1')), ['s1', 'p1', 'o1'], ['s1', 'p1', 'o1', 'c4'])); }); describe('when searched with non-existing subject and object parameters', () => { itShouldBeEmpty(store.getQuads(new NamedNode('s2'), null, new NamedNode('o3'))); }); describe('when searched with existing predicate and object parameters', () => { it('should return all items with this predicate and object in all graphs', shouldIncludeAll(store.getQuads(null, new NamedNode('p1'), new NamedNode('o1')), ['s1', 'p1', 'o1'], ['s2', 'p1', 'o1'], ['s1', 'p1', 'o1', 'c4'])); }); describe('when searched with non-existing predicate and object parameters in the default graph', () => { itShouldBeEmpty(store.getQuads(null, new NamedNode('p2'), new NamedNode('o3'), new DefaultGraph())); }); describe('when searched with existing subject, predicate, and object parameters', () => { it('should return all items with this subject, predicate, and object in all graphs', shouldIncludeAll(store.getQuads(new NamedNode('s1'), new NamedNode('p1'), new NamedNode('o1')), ['s1', 'p1', 'o1'], ['s1', 'p1', 'o1', 'c4'])); }); describe('when searched with a non-existing triple', () => { itShouldBeEmpty(store.getQuads(new NamedNode('s2'), new NamedNode('p2'), new NamedNode('o1'))); }); describe('when searched with the default graph parameter', () => { it('should return all items in the default graph', shouldIncludeAll(store.getQuads(null, null, null, new DefaultGraph()), ['s1', 'p1', 'o1'], ['s1', 'p1', 'o2'], ['s1', 'p2', 'o2'], ['s2', 'p1', 'o1'], [termToId(new Quad('s2', 'p2', 'o2')), 'p1', 'o3'], ['s2', 'p2', 'o2'])); }); describe('when searched with an existing named graph parameter', () => { it('should return all items in that graph', shouldIncludeAll(store.getQuads(null, null, null, new NamedNode('c4')), ['s1', 'p1', 'o1', 'c4'])); }); describe('when searched with a non-existing named graph parameter', () => { itShouldBeEmpty(store.getQuads(null, null, null, new NamedNode('c5'))); }); describe('match', () => { describe('without parameters', () => { it('should return an object implementing the DatasetCore interface', () => { const dataset = store.match(); dataset.add.should.be.a('function'); dataset.delete.should.be.a('function'); dataset.has.should.be.a('function'); dataset.match.should.be.a('function'); dataset[Symbol.iterator].should.be.a('function'); }); it('should return an object implementing the Readable stream interface', () => { const stream = store.match(); stream.addListener.should.be.a('function'); stream.emit.should.be.a('function'); should.equal(stream.propertyIsEnumerable('destroyed'), false); stream.destroyed.should.equal(false); stream.destroy.should.be.a('function'); stream.eventNames.should.be.a('function'); stream.getMaxListeners.should.be.a('function'); stream.listenerCount.should.be.a('function'); stream.listeners.should.be.a('function'); stream.isPaused.should.be.a('function'); should.equal(stream.isPaused(), false); stream.off.should.be.a('function'); stream.on.should.be.a('function'); stream.once.should.be.a('function'); stream.pause.should.be.a('function'); stream.pipe.should.be.a('function'); stream.prependListener.should.be.a('function'); stream.prependOnceListener.should.be.a('function'); stream.rawListeners.should.be.a('function'); stream.read.should.be.a('function'); stream.readable.should.equal(true); should.equal(stream.propertyIsEnumerable('readableBuffer'), false); should.exist(stream.readableBuffer); // Readable from 'readable-stream' does not implement the `readableEncoding` property. // stream.readableEncoding.should.equal(???); // Readable from 'readable-stream' does not implement the `readableEnded` property. // stream.readableEnded.should.equal(false); should.equal(stream.propertyIsEnumerable('readableFlowing'), false); should.equal(stream.readableFlowing, null); should.equal(stream.propertyIsEnumerable('readableHighWaterMark'), false); stream.readableHighWaterMark.should.equal(16); should.equal(stream.propertyIsEnumerable('readableLength'), false); stream.readableLength.should.equal(0); // Readable from 'readable-stream' does not implement the `readableObjectMode` property. // stream.readableObjectMode.should.equal(true); stream.removeAllListeners.should.be.a('function'); stream.removeListener.should.be.a('function'); stream.resume.should.be.a('function'); stream.setEncoding.should.be.a('function'); stream.setMaxListeners.should.be.a('function'); stream.unpipe.should.be.a('function'); stream.unshift.should.be.a('function'); stream.wrap.should.be.a('function'); stream[Symbol.asyncIterator].should.be.a('function'); }); it('should return all items', forResultStream(shouldIncludeAll, store.match(), ['s1', 'p1', 'o1'], ['s1', 'p1', 'o2'], ['s1', 'p2', 'o2'], ['s2', 'p1', 'o1'], ['s1', 'p1', 'o1', 'c4'], [termToId(new Quad('s2', 'p2', 'o2')), 'p1', 'o3'], ['s2', 'p2', 'o2'])); }); describe('with an existing subject parameter', () => { it('should return all items with this subject in all graphs', forResultStream(shouldIncludeAll, store.match(new NamedNode('s1'), null, null), ['s1', 'p1', 'o1'], ['s1', 'p1', 'o2'], ['s1', 'p2', 'o2'], ['s1', 'p1', 'o1', 'c4'])); it('should return an object implementing the DatasetCore interface', () => { const subject = new NamedNode('s1'); const dataset = store.match(subject, null, null); let count = 0; for (const quad of dataset) { count += 1; should.equal(quad.subject.equals(subject), true); } should.equal(count, 4); should.equal(dataset.size, count); should.equal(dataset.has(new Quad('s2', 'p1', 'o1')), false); dataset.add(new Quad('s2', 'p1', 'o1')); count = 0; // eslint-disable-next-line no-unused-vars for (const _quad of dataset) { count += 1; } should.equal(count, 5); should.equal(dataset.has(new Quad('s2', 'p1', 'o1')), true); const nextDataset = dataset.match(new NamedNode('s2')); nextDataset.add(new Quad('s2', 'p2', 'o2')); count = 0; // eslint-disable-next-line no-unused-vars for (const _quad of nextDataset) { count += 1; } should.equal(count, 2); should.equal(nextDataset.has(new Quad('s2', 'p1', 'o1')), true); should.equal(nextDataset.has(new Quad('s2', 'p2', 'o2')), true); nextDataset.delete(new Quad('s2', 'p1', 'o1')); nextDataset.delete(new Quad('s2', 'p2', 'o2')); should.equal(nextDataset.has(new Quad('s2', 'p1', 'o1')), false); should.equal(nextDataset.has(new Quad('s2', 'p2', 'o2')), false); }); }); describe('with non-existing predicate and object parameters in the default graph', () => { forResultStream(itShouldBeEmpty, store.match(null, new NamedNode('p2'), new NamedNode('o3'), new DefaultGraph())); }); }); describe('getSubjects', () => { describe('with existing predicate, object and graph parameters', () => { it('should return all subjects with this predicate, object and graph', () => { store.getSubjects(new NamedNode('p1'), new NamedNode('o1'), new NamedNode('c4')).should.have.deep.members([new NamedNode('s1')]); }); }); describe('with existing predicate and object parameters', () => { it('should return all subjects with this predicate and object', () => { store.getSubjects(new NamedNode('p2'), new NamedNode('o2'), null).should.have.deep.members([new NamedNode('s1'), new NamedNode('s2')]); }); }); describe('with existing predicate and graph parameters', () => { it('should return all subjects with this predicate and graph', () => { store.getSubjects(new NamedNode('p1'), null, new DefaultGraph()).should.have.deep.members([new NamedNode('s1'), new NamedNode('s2'), new Quad(new NamedNode('s2'), new NamedNode('p2'), new NamedNode('o2'))]); }); }); describe('with existing object and graph parameters', () => { it('should return all subjects with this object and graph', () => { store.getSubjects(null, new NamedNode('o1'), new DefaultGraph()).should.have.deep.members([new NamedNode('s1'), new NamedNode('s2')]); }); }); describe('with an existing predicate parameter', () => { it('should return all subjects with this predicate', () => { store.getSubjects(new NamedNode('p1'), null, null).should.have.deep.members([new NamedNode('s1'), new NamedNode('s2'), new Quad(new NamedNode('s2'), new NamedNode('p2'), new NamedNode('o2'))]); }); }); describe('with an existing object parameter', () => { it('should return all subjects with this object', () => { store.getSubjects(null, new NamedNode('o1'), null).should.have.deep.members([new NamedNode('s1'), new NamedNode('s2')]); }); }); describe('with an existing graph parameter', () => { it('should return all subjects in the graph', () => { store.getSubjects(null, null, new NamedNode('c4')).should.have.deep.members([new NamedNode('s1')]); }); }); describe('with no parameters', () => { it('should return all subjects', () => { store.getSubjects(null, null, null).should.have.deep.members([new NamedNode('s1'), new NamedNode('s2'), new Quad(new NamedNode('s2'), new NamedNode('p2'), new NamedNode('o2'))]); }); }); }); describe('getPredicates', () => { describe('with existing subject, object and graph parameters', () => { it('should return all predicates with this subject, object and graph', () => { store.getPredicates(new NamedNode('s1'), new NamedNode('o1'), new NamedNode('c4')).should.have.deep.members([new NamedNode('p1')]); }); }); describe('with existing subject and object parameters', () => { it('should return all predicates with this subject and object', () => { store.getPredicates(new NamedNode('s1'), new NamedNode('o2'), null).should.have.deep.members([new NamedNode('p1'), new NamedNode('p2')]); }); }); describe('with existing subject and graph parameters', () => { it('should return all predicates with this subject and graph', () => { store.getPredicates(new NamedNode('s1'), null, new DefaultGraph()).should.have.deep.members([new NamedNode('p1'), new NamedNode('p2')]); }); }); describe('with existing object and graph parameters', () => { it('should return all predicates with this object and graph', () => { store.getPredicates(null, new NamedNode('o1'), new DefaultGraph()).should.have.deep.members([new NamedNode('p1')]); }); }); describe('with an existing subject parameter', () => { it('should return all predicates with this subject', () => { store.getPredicates(new NamedNode('s2'), null, null).should.have.deep.members([new NamedNode('p1'), new NamedNode('p2')]); }); }); describe('with an existing object parameter', () => { it('should return all predicates with this object', () => { store.getPredicates(null, new NamedNode('o1'), null).should.have.deep.members([new NamedNode('p1')]); }); }); describe('with an existing graph parameter', () => { it('should return all predicates in the graph', () => { store.getPredicates(null, null, new NamedNode('c4')).should.have.deep.members([new NamedNode('p1')]); }); }); describe('with no parameters', () => { it('should return all predicates', () => { store.getPredicates(null, null, null).should.have.deep.members([new NamedNode('p1'), new NamedNode('p2')]); }); }); }); describe('getObjects', () => { describe('with existing subject, predicate and graph parameters', () => { it('should return all objects with this subject, predicate and graph', () => { store.getObjects(new NamedNode('s1'), new NamedNode('p1'), new DefaultGraph()).should.have.deep.members([new NamedNode('o1'), new NamedNode('o2')]); }); }); describe('with existing subject and predicate parameters', () => { it('should return all objects with this subject and predicate', () => { store.getObjects(new NamedNode('s1'), new NamedNode('p1'), null).should.have.deep.members([new NamedNode('o1'), new NamedNode('o2')]); }); }); describe('with existing subject and graph parameters', () => { it('should return all objects with this subject and graph', () => { store.getObjects(new NamedNode('s1'), null, new DefaultGraph()).should.have.deep.members([new NamedNode('o1'), new NamedNode('o2')]); }); }); describe('with existing predicate and graph parameters', () => { it('should return all objects with this predicate and graph', () => { store.getObjects(null, new NamedNode('p1'), new DefaultGraph()).should.have.deep.members([new NamedNode('o1'), new NamedNode('o2'), new NamedNode('o3')]); }); }); describe('with an existing subject parameter', () => { it('should return all objects with this subject', () => { store.getObjects(new NamedNode('s1'), null, null).should.have.deep.members([new NamedNode('o1'), new NamedNode('o2')]); }); }); describe('with an existing predicate parameter', () => { it('should return all objects with this predicate', () => { store.getObjects(null, new NamedNode('p1'), null).should.have.deep.members([new NamedNode('o1'), new NamedNode('o2'), new NamedNode('o3')]); }); }); describe('with an existing graph parameter', () => { it('should return all objects in the graph', () => { store.getObjects(null, null, new NamedNode('c4')).should.have.deep.members([new NamedNode('o1')]); }); }); describe('with no parameters', () => { it('should return all objects', () => { store.getObjects(null, null, null).should.have.deep.members([new NamedNode('o1'), new NamedNode('o2'), new NamedNode('o3')]); }); }); }); describe('getGraphs', () => { describe('with existing subject, predicate and object parameters', () => { it('should return all graphs with this subject, predicate and object', () => { store.getGraphs(new NamedNode('s1'), new NamedNode('p1'), new NamedNode('o1')).should.have.deep.members([new NamedNode('c4'), new DefaultGraph()]); }); }); describe('with existing subject and predicate parameters', () => { it('should return all graphs with this subject and predicate', () => { store.getGraphs(new NamedNode('s1'), new NamedNode('p1'), null).should.have.deep.members([new NamedNode('c4'), new DefaultGraph()]); }); }); describe('with existing subject and object parameters', () => { it('should return all graphs with this subject and object', () => { store.getGraphs(new NamedNode('s1'), null, new NamedNode('o2')).should.have.deep.members([new DefaultGraph()]); }); }); describe('with existing predicate and object parameters', () => { it('should return all graphs with this predicate and object', () => { store.getGraphs(null, new NamedNode('p1'), new NamedNode('o1')).should.have.deep.members([new DefaultGraph(), new NamedNode('c4')]); }); }); describe('with an existing subject parameter', () => { it('should return all graphs with this subject', () => { store.getGraphs(new NamedNode('s1'), null, null).should.have.deep.members([new NamedNode('c4'), new DefaultGraph()]); }); }); describe('with an existing predicate parameter', () => { it('should return all graphs with this predicate', () => { store.getGraphs(null, new NamedNode('p1'), null).should.have.deep.members([new NamedNode('c4'), new DefaultGraph()]); }); }); describe('with an existing object parameter', () => { it('should return all graphs with this object', () => { store.getGraphs(null, null, new NamedNode('o2')).should.have.deep.members([new DefaultGraph()]); }); }); describe('with no parameters', () => { it('should return all graphs', () => { store.getGraphs(null, null, null).should.have.deep.members([new NamedNode('c4'), new DefaultGraph()]); }); }); }); describe('forEach', () => { describe('with existing subject, predicate, object and graph parameters', () => { it('should have iterated all items with this subject, predicate, object and graph', shouldIncludeAll(collect(store, 'forEach', 's1', 'p1', 'o2', ''), ['s1', 'p1', 'o2', ''])); }); describe('with existing subject, predicate and object parameters', () => { it('should have iterated all items with this subject, predicate and object', shouldIncludeAll(collect(store, 'forEach', 's1', 'p2', 'o2', null), ['s1', 'p2', 'o2', ''])); }); describe('with existing subject, predicate and graph parameters', () => { it('should have iterated all items with this subject, predicate and graph', shouldIncludeAll(collect(store, 'forEach', 's1', 'p1', null, ''), ['s1', 'p1', 'o1', ''], ['s1', 'p1', 'o2', ''])); }); describe('with existing subject, object and graph parameters', () => { it('should have iterated all items with this subject, object and graph', shouldIncludeAll(collect(store, 'forEach', 's1', null, 'o2', ''), ['s1', 'p1', 'o2', ''], ['s1', 'p2', 'o2', ''])); }); describe('with existing predicate, object and graph parameters', () => { it('should have iterated all items with this predicate, object and graph', shouldIncludeAll(collect(store, 'forEach', null, 'p1', 'o1', ''), ['s1', 'p1', 'o1', ''], ['s2', 'p1', 'o1', ''])); }); describe('with existing subject and predicate parameters', () => { it('should iterate all items with this subject and predicate', shouldIncludeAll(collect(store, 'forEach', 's1', 'p1', null, null), ['s1', 'p1', 'o1', ''], ['s1', 'p1', 'o2', ''], ['s1', 'p1', 'o1', 'c4'])); }); describe('with existing subject and object parameters', () => { it('should iterate all items with this subject and predicate', shouldIncludeAll(collect(store, 'forEach', 's1', null, 'o2', null), ['s1', 'p1', 'o2', ''], ['s1', 'p2', 'o2', ''])); }); describe('with existing subject and graph parameters', () => { it('should iterate all items with this subject and graph', shouldIncludeAll(collect(store, 'forEach', 's1', null, null, 'c4'), ['s1', 'p1', 'o1', 'c4'])); }); describe('with existing predicate and object parameters', () => { it('should iterate all items with this predicate and object', shouldIncludeAll(collect(store, 'forEach', null, 'p1', 'o1', null), ['s1', 'p1', 'o1', ''], ['s2', 'p1', 'o1', ''], ['s1', 'p1', 'o1', 'c4'])); }); describe('with existing predicate and graph parameters', () => { it('should iterate all items with this predicate and graph', shouldIncludeAll(collect(store, 'forEach', null, 'p1', null, ''), ['s1', 'p1', 'o1', ''], ['s1', 'p1', 'o2', ''], ['s2', 'p1', 'o1', ''], [termToId(new Quad('s2', 'p2', 'o2')), 'p1', 'o3', ''])); }); describe('with existing object and graph parameters', () => { it('should iterate all items with this object and graph', shouldIncludeAll(collect(store, 'forEach', null, null, 'o1', ''), ['s1', 'p1', 'o1', ''], ['s2', 'p1', 'o1', ''])); }); describe('with an existing subject parameter', () => { it('should iterate all items with this subject', shouldIncludeAll(collect(store, 'forEach', 's2', null, null, null), ['s2', 'p1', 'o1', ''], ['s2', 'p2', 'o2', ''])); }); describe('with an existing predicate parameter', () => { it('should iterate all items with this predicate', shouldIncludeAll(collect(store, 'forEach', null, 'p1', null, null), ['s1', 'p1', 'o1', ''], ['s1', 'p1', 'o2', ''], ['s2', 'p1', 'o1', ''], ['s1', 'p1', 'o1', 'c4'], [termToId(new Quad('s2', 'p2', 'o2')), 'p1', 'o3', ''])); }); describe('with an existing object parameter', () => { it('should iterate all items with this object', shouldIncludeAll(collect(store, 'forEach', null, null, 'o1', null), ['s1', 'p1', 'o1', ''], ['s2', 'p1', 'o1', ''], ['s1', 'p1', 'o1', 'c4'])); }); describe('with an existing graph parameter', () => { it('should iterate all items with this graph', shouldIncludeAll(collect(store, 'forEach', null, null, null, ''), ['s1', 'p1', 'o1'], ['s1', 'p1', 'o2'], ['s1', 'p2', 'o2'], ['s2', 'p1', 'o1'], ['s2', 'p2', 'o2'], [termToId(new Quad('s2', 'p2', 'o2')), 'p1', 'o3', ''])); }); describe('with no parameters', () => { it('should iterate all items', shouldIncludeAll(collect(store, 'forEach', null, null, null, null), ['s1', 'p1', 'o1'], ['s1', 'p1', 'o2'], ['s1', 'p2', 'o2'], ['s2', 'p1', 'o1'], ['s2', 'p2', 'o2'], ['s1', 'p1', 'o1', 'c4'], [termToId(new Quad('s2', 'p2', 'o2')), 'p1', 'o3', ''])); }); }); describe('forSubjects', () => { describe('with existing predicate, object and graph parameters', () => { it('should iterate all subjects with this predicate, object and graph', () => { collect(store, 'forSubjects', 'p1', 'o1', '').should.have.deep.members([new NamedNode('s1'), new NamedNode('s2')]); }); }); describe('with a non-existing predicate', () => { it('should be empty', () => { collect(store, 'forSubjects', 'p3', null, null).should.be.empty; }); }); describe('with a non-existing object', () => { it('should be empty', () => { collect(store, 'forSubjects', null, 'o4', null).should.be.empty; }); }); describe('with a non-existing graph', () => { it('should be empty', () => { collect(store, 'forSubjects', null, null, 'g2').should.be.empty; }); }); }); describe('forPredicates', () => { describe('with existing subject, object and graph parameters', () => { it('should iterate all predicates with this subject, object and graph', () => { collect(store, 'forPredicates', 's1', 'o2', '').should.have.deep.members([new NamedNode('p1'), new NamedNode('p2')]); }); }); describe('with a non-existing subject', () => { it('should be empty', () => { collect(store, 'forPredicates', 's3', null, null).should.be.empty; }); }); describe('with a non-existing object', () => { it('should be empty', () => { collect(store, 'forPredicates', null, 'o4', null).should.be.empty; }); }); describe('with a non-existing graph', () => { it('should be empty', () => { collect(store, 'forPredicates', null, null, 'g2').should.be.empty; }); }); }); describe('forObjects', () => { describe('with existing subject, predicate and graph parameters', () => { it('should iterate all objects with this subject, predicate and graph', () => { collect(store, 'forObjects', 's1', 'p1', '').should.have.deep.members([new NamedNode('o1'), new NamedNode('o2')]); }); }); describe('with a non-existing subject', () => { it('should be empty', () => { collect(store, 'forObjects', 's3', null, null).should.be.empty; }); }); describe('with a non-existing predicate', () => { it('should be empty', () => { collect(store, 'forObjects', null, 'p3', null).should.be.empty; }); }); describe('with a non-existing graph', () => { it('should be empty', () => { collect(store, 'forObjects', null, null, 'g2').should.be.empty; }); }); }); describe('forGraphs', () => { describe('with existing subject, predicate and object parameters', () => { it('should iterate all graphs with this subject, predicate and object', () => { collect(store, 'forGraphs', 's1', 'p1', 'o1').should.have.deep.members([new DefaultGraph(), new NamedNode('c4')]); }); }); describe('with a non-existing subject', () => { it('should be empty', () => { collect(store, 'forObjects', 's3', null, null).should.be.empty; }); }); describe('with a non-existing predicate', () => { it('should be empty', () => { collect(store, 'forObjects', null, 'p3', null).should.be.empty; }); }); describe('with a non-existing graph', () => { it('should be empty', () => { collect(store, 'forPredicates', null, null, 'g2').should.be.empty; }); }); }); describe('every', () => { let count = 3; function thirdTimeFalse() { return count-- === 0; } describe('with no parameters and a callback always returning true', () => { it('should return true', () => { store.every(alwaysTrue, null, null, null, null).should.be.true; }); }); describe('with no parameters and a callback always returning false', () => { it('should return false', () => { store.every(alwaysFalse, null, null, null, null).should.be.false; }); }); describe('with no parameters and a callback that returns false after 3 calls', () => { it('should return false', () => { store.every(thirdTimeFalse, null, null, null, null).should.be.false; }); }); }); describe('some', () => { let count = 3; function thirdTimeFalse() { return count-- !== 0; } describe('with no parameters and a callback always returning true', () => { it('should return true', () => { store.some(alwaysTrue, null, null, null, null).should.be.true; }); }); describe('with no parameters and a callback always returning false', () => { it('should return false', () => { store.some(alwaysFalse, null, null, null, null).should.be.false; }); }); describe('with no parameters and a callback that returns true after 3 calls', () => { it('should return false', () => { store.some(thirdTimeFalse, null, null, null, null).should.be.true; }); }); describe('with a non-existing subject', () => { it('should return true', () => { store.some(null, new NamedNode('s3'), null, null, null).should.be.false; }); }); describe('with a non-existing predicate', () => { it('should return false', () => { store.some(null, null, new NamedNode('p3'), null, null).should.be.false; }); }); describe('with a non-existing object', () => { it('should return false', () => { store.some(null, null, null, new NamedNode('o4'), null).should.be.false; }); }); describe('with a non-existing graph', () => { it('should return false', () => { store.some(null, null, null, null, new NamedNode('g2')).should.be.false; }); }); }); describe('when destructured', () => { it('should destructure all quads', shouldIncludeAll( () => { const [a, b, c, d, e, f, g] = store; return [a, b, c, d, e, f, g]; }, ['s1', 'p1', 'o1'], ['s1', 'p1', 'o2'], ['s1', 'p2', 'o2'], ['s2', 'p1', 'o1'], ['s2', 'p2', 'o2'], ['s1', 'p1', 'o1', 'c4'], [termToId(new Quad('s2', 'p2', 'o2')), 'p1', 'o3'])); }); describe('when iterated with for...of', () => { it('should iterate over all quads', () => { let count = 0; // eslint-disable-next-line no-unused-vars for (const quad of store) { count += 1; } should.equal(count, 7); }); }); describe('when spread', () => { it('should spread all quads', shouldIncludeAll( [...store], ['s1', 'p1', 'o1'], ['s1', 'p1', 'o2'], ['s1', 'p2', 'o2'], ['s2', 'p1', 'o1'], ['s1', 'p1', 'o1', 'c4'], [termToId(new Quad('s2', 'p2', 'o2')), 'p1', 'o3'], ['s2', 'p2', 'o2'])); }); describe('when yield starred', () => { it('should yield all quads', shouldIncludeAll( () => { function* yieldAll() { yield* store; } return Array.from(yieldAll()); }, ['s1', 'p1', 'o1'], ['s1', 'p1', 'o2'], ['s1', 'p2', 'o2'], ['s2', 'p1', 'o1'], ['s2', 'p2', 'o2'], ['s1', 'p1', 'o1', 'c4'], [termToId(new Quad('s2', 'p2', 'o2')), 'p1', 'o3'])); }); describe('when counted without parameters', () => { it('should count all items in all graphs', () => { store.countQuads().should.equal(7); }); }); describe('when counted with an existing subject parameter', () => { it('should count all items with this subject in all graphs', () => { store.countQuads(new NamedNode('s1'), null, null).should.equal(4); }); }); describe('when counted with a non-existing subject parameter', () => { it('should be empty', () => { store.countQuads(new NamedNode('s3'), null, null).should.equal(0); }); }); describe('when counted with a non-existing subject parameter that exists elsewhere', () => { it('should be empty', () => { store.countQuads(new NamedNode('p1'), null, null).should.equal(0); }); }); describe('when counted with an existing predicate parameter', () => { it('should count all items with this predicate in all graphs', () => { store.countQuads(null, new NamedNode('p1'), null).should.equal(5); }); }); describe('when counted with a non-existing predicate parameter', () => { it('should be empty', () => { store.countQuads(null, new NamedNode('p3'), null).should.equal(0); }); }); describe('when counted with an existing object parameter', () => { it('should count all items with this object in all graphs', () => { store.countQuads(null, null, 'o1').should.equal(3); }); }); describe('when counted with a non-existing object parameter', () => { it('should be empty', () => { store.countQuads(null, null, 'o4').should.equal(0); }); }); describe('when counted with existing subject and predicate parameters', () => { it('should count all items with this subject and predicate in all graphs', () => { store.countQuads('s1', 'p1', null).should.equal(3); }); }); describe('when counted with non-existing subject and predicate parameters', () => { it('should be empty', () => { store.countQuads('s2', 'p3', null).should.equal(0); }); }); describe('when counted with existing subject and object parameters', () => { it('should count all items with this subject and object in all graphs', () => { store.countQuads('s1', null, 'o1').should.equal(2); }); }); describe('when counted with non-existing subject and object parameters', () => { it('should be empty', () => { store.countQuads('s2', null, 'o3').should.equal(0); }); }); describe('when counted with existing predicate and object parameters', () => { it('should count all items with this predicate and object in all graphs', () => { store.countQuads(null, 'p1', 'o1').should.equal(3); }); }); describe('when counted with non-existing predicate and object parameters', () => { it('should be empty', () => { store.countQuads(null, 'p2', 'o3').should.equal(0); }); }); describe('when counted with existing subject, predicate, and object parameters', () => { it('should count all items with this subject, predicate, and object in all graphs', () => { store.countQuads('s1', 'p1', 'o1').should.equal(2); }); }); describe('when counted with a non-existing triple', () => { it('should be empty', () => { store.countQuads('s2', 'p2', 'o1').should.equal(0); }); }); describe('when counted with the default graph parameter', () => { it('should count all items in the default graph', () => { store.countQuads(null, null, null, new DefaultGraph()).should.equal(6); }); }); describe('when counted with an existing named graph parameter', () => { it('should count all items in that graph', () => { store.countQuads(null, null, null, 'c4').should.equal(1); }); }); describe('when counted with a non-existing named graph parameter', () => { it('should be empty', () => { store.countQuads(null, null, null, 'c5').should.equal(0); }); }); describe('when trying to remove a triple with a non-existing subject', () => { before(() => { store.removeQuad(new NamedNode('s0'), new NamedNode('p1'), new NamedNode('o1')).should.be.false; }); it('should still have size 7', () => { store.size.should.eql(7); }); }); describe('when trying to remove a triple with a non-existing predicate', () => { before(() => { store.removeQuad(new NamedNode('s1'), new NamedNode('p0'), new NamedNode('o1')).should.be.false; }); it('should still have size 7', () => { store.size.should.eql(7); }); }); describe('when trying to remove a triple with a non-existing object', () => { before(() => { store.removeQuad(new NamedNode('s1'), new NamedNode('p1'), new NamedNode('o0')).should.be.false; }); it('should still have size 7', () => { store.size.should.eql(7); }); }); describe('when trying to remove a triple for which no subjects exist', () => { before(() => { store.removeQuad(new NamedNode('o1'), new NamedNode('p1'), new NamedNode('o1')).should.be.false; }); it('should still have size 7', () => { store.size.should.eql(7); }); }); describe('when trying to remove a triple for which no predicates exist', () => { before(() => { store.removeQuad(new NamedNode('s1'), new NamedNode('s1'), new NamedNode('o1')).should.be.false; }); it('should still have size 7', () => { store.size.should.eql(7); }); }); describe('when trying to remove a triple for which no objects exist', () => { before(() => { store.removeQuad(new NamedNode('s1'), new NamedNode('p1'), new NamedNode('s1')).should.be.false; }); it('should still have size 7', () => { store.size.should.eql(7); }); }); describe('when trying to remove a triple that does not exist', () => { before(() => { store.removeQuad(new NamedNode('s1'), new NamedNode('p2'), new NamedNode('o1')).should.be.false; }); it('should still have size 7', () => { store.size.should.eql(7); }); }); describe('when trying to remove an incomplete triple', () => { before(() => { store.removeQuad(new NamedNode('s1'), null, null).should.be.false; }); it('should still have size 7', () => { store.size.should.eql(7); }); }); describe('when trying to remove a triple with a non-existing graph', () => { before(() => { store.removeQuad(new NamedNode('s1'), new NamedNode('p1'), new NamedNode('o1'), new NamedNode('c0')).should.be.false; }); it('should still have size 7', () => { store.size.should.eql(7); }); }); describe('when removing an existing triple', () => { before(() => { store.removeQuad(new NamedNode('s1'), new NamedNode('p1'), new NamedNode('o1')).should.be.true; }); it('should have size 6', () => { store.size.should.eql(6); }); it('should not contain that triple anymore', shouldIncludeAll(() => { return store.getQuads(); }, ['s1', 'p1', 'o2'], ['s1', 'p2', 'o2'], ['s2', 'p1', 'o1'], ['s2', 'p2', 'o2'], ['s1', 'p1', 'o1', 'c4'], [termToId(new Quad('s2', 'p2', 'o2')), 'p1', 'o3', ''])); }); describe('when removing an existing triple from a named graph', () => { before(() => { store.removeQuad(new NamedNode('s1'), new NamedNode('p1'), new NamedNode('o1'), new NamedNode('c4')).should.be.true; }); it('should have size 5', () => { store.size.should.eql(5); }); itShouldBeEmpty(() => { return store.getQuads(null, null, null, 'c4'); }); }); describe('when removing multiple triples', () => { before(() => { store.removeQuads([ new Quad(new NamedNode('s1'), new NamedNode('p2'), new NamedNode('o2')), new Quad(new NamedNode('s2'), new NamedNode('p1'), new NamedNode('o1')), ]); }); it('should have size 3', () => { store.size.should.eql(3); }); it('should not contain those triples anymore', shouldIncludeAll(() => { return store.getQuads(); }, ['s1', 'p1', 'o2'], ['s2', 'p2', 'o2'], [termToId(new Quad('s2', 'p2', 'o2')), 'p1', 'o3', ''])); }); describe('when adding and removing a triple', () => { before(() => { store.addQuad(new NamedNode('a'), new NamedNode('b'), new NamedNode('c')).should.be.true; store.removeQuad(new NamedNode('a'), new NamedNode('b'), new NamedNode('c')).should.be.true; }); it('should have an unchanged size', () => { store.size.should.eql(3); }); }); }); describe('A Store containing a blank node', () => { const store = new Store(); const b1 = store.createBlankNode(); store.addQuad(new NamedNode('s1'), new NamedNode('p1'), b1).should.be.true; describe('when searched with more than one variable', () => { it('should return a triple with the blank node as an object', shouldIncludeAll(store.getQuads(), ['s1', 'p1', `_:${b1.value}`])); }); describe('when searched with one variable', () => { it('should return a triple with the blank node as an object', shouldIncludeAll(store.getQuads('s1', 'p1'), ['s1', 'p1', `_:${b1.value}`])); }); }); describe('A Store with a custom DataFactory', () => { const factory = {}; let store; before(() => { factory.quad = function (s, p, o, g) { return { s: s, p: p, o: o, g: g }; }; ['namedNode', 'blankNode', 'literal', 'variable', 'defaultGraph'].forEach(f => { factory[f] = function (n) { return n ? `${f[0]}-${n}` : f; }; }); store = new Store({ factory: factory }); store.addQuad('s1', 'p1', 'o1').should.be.true; store.addQuad({ subject: 's1', predicate: 'p1', object: 'o2' }).should.be.true; store.addQuads([ { subject: 's1', predicate: 'p2', object: 'o2' }, { subject: 's2', predicate: 'p1', object: 'o1' }, ]); store.addQuad('s1', 'p1', 'o1', 'c4').should.be.true; }); it('should use the factory when returning quads', () => { store.getQuads().should.deep.equal([ { s: 'n-s1', p: 'n-p1', o: 'n-o1', g: 'defaultGraph' }, { s: 'n-s1', p: 'n-p1', o: 'n-o2', g: 'defaultGraph' }, { s: 'n-s1', p: 'n-p2', o: 'n-o2', g: 'defaultGraph' }, { s: 'n-s2', p: 'n-p1', o: 'n-o1', g: 'defaultGraph' }, { s: 'n-s1', p: 'n-p1', o: 'n-o1', g: 'n-c4' }, ]); }); }); describe('A Store', () => { const store = new Store(); it('should implement the DatasetCore interface', () => { store.add.should.be.a('function'); store.delete.should.be.a('function'); store.has.should.be.a('function'); store.match.should.be.a('function'); store[Symbol.iterator].should.be.a('function'); }); // Test inspired by http://www.devthought.com/2012/01/18/an-object-is-not-a-hash/. // The value `__proto__` is not supported however – fixing it introduces too much overhead. it('should be able to contain entities with JavaScript object property names', () => { store.addQuad('toString', 'valueOf', 'toLocaleString', 'hasOwnProperty').should.be.true; shouldIncludeAll(store.getQuads(null, null, null, 'hasOwnProperty'), ['toString', 'valueOf', 'toLocaleString', 'hasOwnProperty'])(); }); it('should be able to contain entities named "null"', () => { store.addQuad('null', 'null', 'null', 'null').should.be.true; shouldIncludeAll(store.getQuads(null, null, null, 'null'), ['null', 'null', 'null', 'null'])(); }); }); describe('A Store containing a well-formed rdf:Collection as subject', () => { const store = new Store(); const listElements = addList(store, new NamedNode('element1'), new Literal('"element2"')); store.addQuad(listElements[0], new NamedNode('p1'), new NamedNode('o1')).should.be.true; const listItemsJSON = { b0: [ { termType: 'NamedNode', value: 'element1' }, { termType: 'Literal', value: 'element2', language: '', datatype: { termType: 'NamedNode', value: namespaces.xsd.string } }, ], }; describe('extractLists without remove', () => { const lists = store.extractLists(); it('should not delete triples', shouldIncludeAll(store.getQuads(), [`_:${listElements[0].value}`, 'p1', 'o1'], [`_:${listElements[0].value}`, namespaces.rdf.first, 'element1'], [`_:${listElements[0].value}`, namespaces.rdf.rest, `_:${listElements[1].value}`], [`_:${listElements[1].value}`, namespaces.rdf.first, '"element2"'], [`_:${listElements[1].value}`, namespaces.rdf.rest, namespaces.rdf.nil] )); it('should generate a list of Collections', () => { expect(listsToJSON(lists)).to.deep.equal(listItemsJSON); }); }); describe('extractLists with remove', () => { const lists = store.extractLists({ remove: true }); it('should remove the first/rest triples and return the list members', shouldIncludeAll(store.getQuads(), [`_:${listElements[0].value}`, 'p1', 'o1'])); it('should generate a list of Collections', () => { expect(listsToJSON(lists)).to.deep.equal(listItemsJSON); }); }); }); describe('A Store containing a well-formed rdf:Collection as object', () => { const store = new Store(); const listElements = addList(store, new NamedNode('element1'), new Literal('"element2"')); store.addQuad(new NamedNode('s1'), new NamedNode('p1'), listElements[0]).should.be.true; const listItemsJSON = { b0: [ { termType: 'NamedNode', value: 'element1' }, { termType: 'Literal', value: 'element2', language: '', datatype: { termType: 'NamedNode', value: namespaces.xsd.string } }, ], }; describe('extractLists without remove', () => { const lists = store.extractLists(); it('should not delete triples', shouldIncludeAll(store.getQuads(), ['s1', 'p1', `_:${listElements[0].value}`], [`_:${listElements[0].value}`, namespaces.rdf.first, 'element1'], [`_:${listElements[0].value}`, namespaces.rdf.rest, `_:${listElements[1].value}`], [`_:${listElements[1].value}`, namespaces.rdf.first, '"element2"'], [`_:${listElements[1].value}`, namespaces.rdf.rest, namespaces.rdf.nil] )); it('should generate a list of Collections', () => { expect(listsToJSON(lists)).to.deep.equal(listItemsJSON); }); }); describe('extractLists with remove', () => { const lists = store.extractLists({ remove: true }); it('should remove the first/rest triples and return the list members', shouldIncludeAll(store.getQuads(), ['s1', 'p1', `_:${listElements[0].value}`])); it('should generate a list of Collections', () => { expect(listsToJSON(lists)).to.deep.equal(listItemsJSON); }); }); }); describe('A Store containing a well-formed rdf:Collection that is not attached', () => { const store = new Store(); const listElements = addList(store, new NamedNode('element1'), new Literal('"element2"')); store.addQuad(new NamedNode('s1'), new NamedNode('p1'), new NamedNode('o1')); describe('extractLists without remove', () => { const lists = store.extractLists(); it('should not delete triples', shouldIncludeAll(store.getQuads(), ['s1', 'p1', 'o1'], [`_:${listElements[0].value}`, namespaces.rdf.first, 'element1'], [`_:${listElements[0].value}`, namespaces.rdf.rest, `_:${listElements[1].value}`], [`_:${listElements[1].value}`, namespaces.rdf.first, '"element2"'], [`_:${listElements[1].value}`, namespaces.rdf.rest, namespaces.rdf.nil] )); it('should generate a list of Collections', () => { expect(listsToJSON(lists)).to.deep.equal({}); }); }); describe('extractLists with remove', () => { const lists = store.extractLists({ remove: true }); it('should remove the first/rest triples and return the list members', shouldIncludeAll(store.getQuads(), ['s1', 'p1', 'o1'])); it('should generate a list of Collections', () => { expect(listsToJSON(lists)).to.deep.equal({}); }); }); }); describe('A Store containing a rdf:Collection without first', () => { const store = new Store(); store.addQuad(store.createBlankNode(), new NamedNode(namespaces.rdf.rest), namespaces.rdf.nil).should.be.true; it('extractLists throws an error', () => { expect(() => store.extractLists()).throws('b0 has no list head'); }); }); describe('A Store containing an rdf:Collection with multiple rdf:first arcs on head', () => { const store = new Store(); const listElements = addList(store, store.createBlankNode(), store.createBlankNode()); store.addQuad(listElements[0], new NamedNode(namespaces.rdf.first), store.createBlankNode()).should.be.true; it('extractLists throws an error', () => { expect(() => store.extractLists()).throws('b2 has multiple rdf:first arcs'); }); }); describe('A Store containing an rdf:Collection with multiple rdf:first arcs on tail', () => { const store = new Store(); const listElements = addList(store, store.createBlankNode(), store.createBlankNode()); store.addQuad(listElements[1], new NamedNode(namespaces.rdf.first), store.createBlankNode()).should.be.true; it('extractLists throws an error', () => { expect(() => store.extractLists()).throws('b3 has multiple rdf:first arcs'); }); }); describe('A Store containing an rdf:Collection with multiple rdf:rest arcs on head', () => { const store = new Store(); const listElements = addList(store, store.createBlankNode(), store.createBlankNode()); store.addQuad(listElements[0], new NamedNode(namespaces.rdf.rest), store.createBlankNode()).should.be.true; it('extractLists throws an error', () => { expect(() => store.extractLists()).throws('b2 has multiple rdf:rest arcs'); }); }); describe('A Store containing an rdf:Collection with multiple rdf:rest arcs on tail', () => { const store = new Store(); const listElements = addList(store, store.createBlankNode(), store.createBlankNode()); store.addQuad(listElements[1], new NamedNode(namespaces.rdf.rest), store.createBlankNode()).should.be.true; it('extractLists throws an error', () => { expect(() => store.extractLists()).throws('b3 has multiple rdf:rest arcs'); }); }); describe('A Store containing an rdf:Collection with non-list arcs out', () => { const store = new Store(); const listElements = addList(store, store.createBlankNode(), store.createBlankNode(), store.createBlankNode()); store.addQuad(listElements[1], new NamedNode('http://a.example/foo'), store.createBlankNode()).should.be.true; it('extractLists throws an error', () => { expect(() => store.extractLists()).throws('b4 can\'t be subject and object'); }); }); describe('A Store containing an rdf:Collection with multiple incoming rdf:rest arcs', () => { const store = new Store(); const listElements = addList(store, store.createBlankNode(), store.createBlankNode(), store.createBlankNode()); store.addQuad(store.createBlankNode(), new NamedNode(namespaces.rdf.rest), listElements[1]).should.be.true; it('extractLists throws an error', () => { expect(() => store.extractLists()).throws('b4 has incoming rdf:rest arcs'); }); }); describe('A Store containing an rdf:Collection with co-references out of head', () => { const store = new Store(); const listElements = addList(store, store.createBlankNode(), store.createBlankNode(), store.createBlankNode()); store.addQuad(listElements[0], new NamedNode('p1'), new NamedNode('o1')).should.be.true; store.addQuad(listElements[0], new NamedNode('p1'), new NamedNode('o2')).should.be.true; it('extractLists throws an error', () => { expect(() => store.extractLists()).throws('b3 has non-list arcs out'); }); }); describe('A Store containing an rdf:Collection with co-references into head', () => { const store = new Store(); const listElements = addList(store, store.createBlankNode(), store.createBlankNode(), store.createBlankNode()); store.addQuad(new NamedNode('s1'), new NamedNode('p1'), listElements[0]).should.be.true; store.addQuad(new NamedNode('s2'), new NamedNode(namespaces.rdf.rest), listElements[0]).should.be.true; store.addQuad(new NamedNode('s2'), new NamedNode('p1'), listElements[0]).should.be.true; it('extractLists throws an error', () => { expect(() => store.extractLists()).throws('b3 can\'t have coreferences'); }); }); describe('A Store containing an rdf:Collection spread across graphs', () => { const member0 = new NamedNode('element1'); const member1 = new Literal('"element2"'); const store = new Store(); const listElements = [ store.createBlankNode(), store.createBlankNode(), ]; store.addQuad(listElements[0], new NamedNode(namespaces.rdf.first), member0).should.be.true; store.addQuad(listElements[0], new NamedNode(namespaces.rdf.rest), listElements[1], new NamedNode('g1')).should.be.true; store.addQuad(listElements[1], new NamedNode(namespaces.rdf.first), member1).should.be.true; store.addQuad(listElements[1], new NamedNode(namespaces.rdf.rest), new NamedNode(namespaces.rdf.nil)).should.be.true; store.addQuad(new NamedNode('s1'), new NamedNode('p1'), listElements[0]).should.be.true; describe('extractLists without ignoreErrors', () => { it('extractLists throws an error', () => { expect(() => store.extractLists()).throws('b0 not confined to single graph'); }); }); describe('extractLists with ignoreErrors', () => { const lists = store.extractLists({ ignoreErrors: true }); it('should not delete triples', shouldIncludeAll(store.getQuads(), ['s1', 'p1', `_:${listElements[0].value}`], [`_:${listElements[0].value}`, namespaces.rdf.first, 'element1'], [`_:${listElements[0].value}`, namespaces.rdf.rest, `_:${listElements[1].value}`, 'g1'], [`_:${listElements[1].value}`, namespaces.rdf.first, '"element2"'], [`_:${listElements[1].value}`, namespaces.rdf.rest, namespaces.rdf.nil] )); it('should generate an empty list of Collections', () => { expect(listsToJSON(lists)).to.deep.equal({}); }); }); }); describe('handles concurrent read/write', () => { let store; beforeEach(() => { store = new Store([ new Quad(new NamedNode('s1'), new NamedNode('p1'), new NamedNode('o1')), new Quad(new NamedNode('s1'), new NamedNode('p1'), new NamedNode('o3')), ]); }); it('should include added elements in match if iteration has not yet started', () => { const m = store.match(null, null, null, null); store.add(new Quad(new NamedNode('s1'), new NamedNode('p1'), new NamedNode('o2'))); [...m].should.have.length(3); [...store.match(null, null, null, null)].should.have.length(3); }); it('should still include results of original match after iterating while adding new data', () => { const m = store.match(null, null, null, null)[Symbol.iterator](); m.next().value.should.deep.equal(new Quad(new NamedNode('s1'), new NamedNode('p1'), new NamedNode('o1'))); store.add(new Quad(new NamedNode('s1'), new NamedNode('p1'), new NamedNode('o0'))); store.add(new Quad(new NamedNode('s1'), new NamedNode('p1'), new NamedNode('o2'))); store.add(new Quad(new NamedNode('s1'), new NamedNode('p1'), new NamedNode('o4'))); m.next().value.should.deep.equal(new Quad(new NamedNode('s1'), new NamedNode('p1'), new NamedNode('o3'))); m.next().done.should.be.true; [...store.match(null, null, null, null)].should.have.length(5); }); }); }); function alwaysTrue() { return true; } function alwaysFalse() { return false; } function collect(store, method, arg1, arg2, arg3, arg4) { const results = []; store[method](r => results.push(r), arg1 && termFromId(arg1), arg2 && termFromId(arg2), arg3 && termFromId(arg3), arg4 && termFromId(arg4) ); return results; } function itShouldBeEmpty(result) { it('should be empty', () => { if (typeof result === 'function') result = result(); result.should.be.empty; }); } function shouldIncludeAll(result) { const items = Array.prototype.slice.call(arguments, 1).map(arg => { return new Quad(termFromId(arg[0]), termFromId(arg[1]), termFromId(arg[2]), termFromId(arg[3] || '')); }); return function () { if (typeof result === 'function') result = result(); result = result.map(r => { return r.toJSON(); }); result.should.have.length(items.length); for (let i = 0; i < items.length; i++) result.should.include.something.that.deep.equals(items[i].toJSON()); }; } function forResultStream(testFunction, result) { const items = Array.prototype.slice.call(arguments, 2); return function (done) { if (typeof result === 'function') result = result(); arrayifyStream(result) .then(array => { items.unshift(array); testFunction.apply({}, items)(); }) .then(done, done); }; } function ArrayReader(items) { const reader = new Readable({ objectMode: true }); reader._read = function () { this.push(items.shift() || null); }; return reader; } function addList(store, ...items) { if (!items.length) return new NamedNode(namespaces.rdf.nil); const listElements = [store.createBlankNode()]; items.forEach((item, i) => { store.addQuad(listElements[i], new NamedNode(namespaces.rdf.first), item); if (i === items.length - 1) store.addQuad(listElements[i], new NamedNode(namespaces.rdf.rest), new NamedNode(namespaces.rdf.nil)); else { listElements.push(store.createBlankNode()); store.addQuad(listElements[i], new NamedNode(namespaces.rdf.rest), listElements[i + 1]); } }); return listElements; } function listsToJSON(lists) { for (const list in lists) lists[list] = lists[list].map(i => i.toJSON()); return lists; } N3.js-1.16.3/test/N3StreamParser-test.js000066400000000000000000000100351433366257500176150ustar00rootroot00000000000000import { StreamParser, NamedNode } from '../src/'; import { Readable, Writable } from 'readable-stream'; describe('StreamParser', () => { describe('The StreamParser export', () => { it('should be a function', () => { StreamParser.should.be.a('function'); }); it('should be a StreamParser constructor', () => { new StreamParser().should.be.an.instanceof(StreamParser); }); }); describe('A StreamParser instance', () => { it('parses the empty stream', shouldParse([], 0)); it('parses the zero-length stream', shouldParse([''], 0)); it('parses the Bom starting stream', shouldParse(['\ufeff'], 0)); it('parses the Bom starting stream when first chunk ""', shouldParse(['', '\ufeff'], 0)); it('parses one triple', shouldParse([' .'], 1)); it('parses two triples', shouldParse([' ', ' . ', '.'], 2)); it('should parse decimals that are split across chunks in the stream', shouldParse(' 11.2 .'.match(/.{1,2}/g), 1)); it('should parse non-breaking spaces that are split across chunks in the stream correctly', done => { const buffer = Buffer.from(' " " .'), chunks = [buffer, buffer.slice(0, 15), buffer.slice(15, buffer.length)]; shouldParse(chunks, 2, triples => { triples[0].should.deep.equal(triples[1]); })(done); }); it("doesn't parse an invalid stream", shouldNotParse(['z.'], 'Unexpected "z." on line 1.'), { token: undefined, line: 1, previousToken: undefined }); it('Should Not parse Bom in middle stream', shouldNotParse([' ', '\ufeff', '.'], 'Unexpected "" on line 1.')); it('emits "prefix" events', shouldEmitPrefixes(['@prefix a: . a:a a:b a:c. @prefix b: .'], { a: new NamedNode('http://a.org/#'), b: new NamedNode('http://b.org/#') })); it('passes an error', () => { const input = new Readable(), parser = new StreamParser(); let error = null; input._read = function () {}; parser.on('error', e => { error = e; }); parser.import(input); input.emit('error', new Error()); expect(error).to.be.an.instanceof(Error); }); }); }); function shouldParse(chunks, expectedLength, validateTriples) { return function (done) { const triples = [], inputStream = new ArrayReader(chunks), parser = new StreamParser(), outputStream = new ArrayWriter(triples); parser.import(inputStream).should.equal(parser); parser.pipe(outputStream); parser.on('error', done); parser.on('end', () => { triples.should.have.length(expectedLength); if (validateTriples) validateTriples(triples); done(); }); }; } function shouldNotParse(chunks, expectedMessage, expectedContext) { return function (done) { const inputStream = new ArrayReader(chunks), parser = new StreamParser(), outputStream = new ArrayWriter([]); inputStream.pipe(parser); parser.pipe(outputStream); parser.on('error', error => { error.should.be.an.instanceof(Error); error.message.should.equal(expectedMessage); if (expectedContext) error.context.should.deep.equal(expectedContext); done(); }); }; } function shouldEmitPrefixes(chunks, expectedPrefixes) { return function (done) { const prefixes = {}, parser = new StreamParser(), inputStream = new ArrayReader(chunks); inputStream.pipe(parser); parser.on('data', () => {}); parser.on('prefix', (prefix, iri) => { prefixes[prefix] = iri; }); parser.on('error', done); parser.on('end', error => { prefixes.should.deep.equal(expectedPrefixes); done(error); }); }; } function ArrayReader(items) { const reader = new Readable(); reader._read = function () { this.push(items.shift() || null); }; return reader; } function ArrayWriter(items) { const writer = new Writable({ objectMode: true }); writer._write = function (chunk, encoding, done) { items.push(chunk); done(); }; return writer; } N3.js-1.16.3/test/N3StreamWriter-test.js000066400000000000000000000102171433366257500176370ustar00rootroot00000000000000import { StreamWriter, Quad, NamedNode, termFromId } from '../src/'; import { Readable, Writable } from 'readable-stream'; describe('StreamWriter', () => { describe('The StreamWriter export', () => { it('should be a function', () => { StreamWriter.should.be.a('function'); }); it('should be a StreamWriter constructor', () => { new StreamWriter().should.be.an.instanceof(StreamWriter); }); }); describe('A StreamWriter instance', () => { it('should serialize 0 triples', shouldSerialize('')); it('should serialize 1 triple', shouldSerialize(['abc', 'def', 'ghi'], ' .\n')); it('should serialize 2 triples', shouldSerialize(['abc', 'def', 'ghi'], ['jkl', 'mno', 'pqr'], ' .\n' + ' .\n')); it('should serialize 3 triples', shouldSerialize(['abc', 'def', 'ghi'], ['jkl', 'mno', 'pqr'], ['stu', 'vwx', 'yz'], ' .\n' + ' .\n' + ' .\n')); it('should use prefixes when possible', shouldSerialize({ prefixes: { a: 'http://a.org/', b: new NamedNode('http://a.org/b#'), c: 'http://a.org/b' } }, ['http://a.org/bc', 'http://a.org/b#ef', 'http://a.org/bhi'], ['http://a.org/bc/de', 'http://a.org/b#e#f', 'http://a.org/b#x/t'], ['http://a.org/3a', 'http://a.org/b#3a', 'http://a.org/b#a3'], '@prefix a: .\n' + '@prefix b: .\n' + '@prefix c: .\n\n' + 'a:bc b:ef a:bhi.\n' + ' .\n' + ' b:a3.\n')); it('should take over prefixes from the input stream', done => { const inputStream = new Readable(), writer = new StreamWriter(), outputStream = new StringWriter(); writer.import(inputStream); writer.pipe(outputStream); // emit prefixes and close inputStream.emit('prefix', 'a', new NamedNode('http://a.org/')); inputStream.emit('prefix', 'b', new NamedNode('http://b.org/')); inputStream.push(null); writer.on('error', done); writer.on('end', () => { outputStream.result.should.equal('@prefix a: .\n\n' + '@prefix b: .\n\n'); done(); }); }); }); it('passes an error', () => { const input = new Readable(), writer = new StreamWriter(); let error = null; input._read = function () {}; writer.on('error', e => { error = e; }); writer.import(input); input.emit('error', new Error()); expect(error).to.be.an.instanceof(Error); }); }); function shouldSerialize(/* options?, tripleArrays..., expectedResult */) { let tripleArrays = Array.prototype.slice.call(arguments); const expectedResult = tripleArrays.pop(), options = tripleArrays[0] instanceof Array ? null : tripleArrays.shift(); tripleArrays = tripleArrays.map(i => { return new Quad(termFromId(i[0]), termFromId(i[1]), termFromId(i[2])); }); return function (done) { const inputStream = new ArrayReader(tripleArrays), writer = new StreamWriter(options), outputStream = new StringWriter(); writer.import(inputStream).should.equal(writer); writer.pipe(outputStream); writer.on('error', done); writer.on('end', () => { outputStream.result.should.equal(expectedResult); done(); }); }; } function ArrayReader(items) { const reader = new Readable({ objectMode: true }); reader._read = function () { this.push(items.shift() || null); }; return reader; } function StringWriter() { const writer = new Writable({ encoding: 'utf-8', decodeStrings: false }); writer.result = ''; writer._write = function (chunk, encoding, done) { this.result += chunk; done(); }; return writer; } N3.js-1.16.3/test/N3Util-test.js000066400000000000000000000213471433366257500161320ustar00rootroot00000000000000import { Util, DataFactory } from '../src/'; const { namedNode, blankNode, literal, variable, defaultGraph, quad } = DataFactory; describe('Util', () => { describe('isNamedNode', () => { it('matches an IRI', () => { Util.isNamedNode(namedNode('http://example.org/')).should.be.true; }); it('matches an empty IRI', () => { Util.isNamedNode(namedNode('')).should.be.true; }); it('does not match a literal', () => { Util.isNamedNode(literal('http://example.org/')).should.be.false; }); it('does not match a blank node', () => { Util.isNamedNode(blankNode('x')).should.be.false; }); it('does not match a variable', () => { Util.isNamedNode(variable('x')).should.be.false; }); it('does not match null', () => { expect(Util.isNamedNode(null)).to.be.false; }); it('does not match undefined', () => { expect(Util.isNamedNode(undefined)).to.be.false; }); }); describe('isLiteral', () => { it('matches a literal', () => { Util.isLiteral(literal('http://example.org/')).should.be.true; }); it('matches a literal with a language', () => { Util.isLiteral(literal('English', 'en')).should.be.true; }); it('matches a literal with a language that contains a number', () => { Util.isLiteral(literal('English', '@es-419')).should.be.true; }); it('matches a literal with a type', () => { Util.isLiteral(literal('3', 'http://www.w3.org/2001/XMLSchema#integer')).should.be.true; }); it('matches a literal with a newline', () => { Util.isLiteral(literal('a\nb')).should.be.true; }); it('matches a literal with a cariage return', () => { Util.isLiteral(literal('a\rb')).should.be.true; }); it('does not match an IRI', () => { Util.isLiteral(namedNode('http://example.org/')).should.be.false; }); it('does not match a blank node', () => { Util.isLiteral(blankNode('_:x')).should.be.false; }); it('does not match a variable', () => { Util.isLiteral(variable('x')).should.be.false; }); it('does not match null', () => { expect(Util.isLiteral(null)).to.be.false; }); it('does not match undefined', () => { expect(Util.isLiteral(undefined)).to.be.false; }); }); describe('isBlankNode', () => { it('matches a blank node', () => { Util.isBlankNode(blankNode('x')).should.be.true; }); it('does not match an IRI', () => { Util.isBlankNode(namedNode('http://example.org/')).should.be.false; }); it('does not match a literal', () => { Util.isBlankNode(literal('http://example.org/')).should.be.false; }); it('does not match a variable', () => { Util.isBlankNode(variable('x')).should.be.false; }); it('does not match null', () => { expect(Util.isBlankNode(null)).to.be.false; }); it('does not match undefined', () => { expect(Util.isBlankNode(undefined)).to.be.false; }); }); describe('isVariable', () => { it('matches a variable', () => { Util.isVariable(variable('x')).should.be.true; }); it('does not match an IRI', () => { Util.isVariable(namedNode('http://example.org/')).should.be.false; }); it('does not match a literal', () => { Util.isVariable(literal('http://example.org/')).should.be.false; }); it('does not match a blank node', () => { Util.isNamedNode(blankNode('x')).should.be.false; }); it('does not match null', () => { expect(Util.isVariable(null)).to.be.false; }); it('does not match undefined', () => { expect(Util.isVariable(undefined)).to.be.false; }); }); describe('isDefaultGraph', () => { it('does not match a blank node', () => { Util.isDefaultGraph(blankNode('x')).should.be.false; }); it('does not match an IRI', () => { Util.isDefaultGraph(namedNode('http://example.org/')).should.be.false; }); it('does not match a literal', () => { Util.isDefaultGraph(literal('http://example.org/')).should.be.false; }); it('does not match null', () => { expect(Util.isVariable(null)).to.be.false; }); it('does not match undefined', () => { expect(Util.isVariable(undefined)).to.be.false; }); }); describe('inDefaultGraph', () => { it('does not match a blank node', () => { Util.inDefaultGraph(quad(null, null, null, blankNode('x'))).should.be.false; }); it('does not match an IRI', () => { Util.inDefaultGraph(quad(null, null, null, namedNode('http://example.org/'))).should.be.false; }); it('does not match a literal', () => { Util.inDefaultGraph(quad(null, null, null, literal('http://example.org/'))).should.be.false; }); it('matches null', () => { Util.inDefaultGraph(quad(null, null, null, null)).should.be.true; }); it('matches undefined', () => { Util.inDefaultGraph(quad(null, null, null, undefined)).should.be.true; }); it('matches the default graph', () => { Util.inDefaultGraph(quad(null, null, null, defaultGraph())).should.be.true; }); }); describe('prefix', () => { const rdfs = Util.prefix('http://www.w3.org/2000/01/rdf-schema#'); it('should return a function', () => { expect(rdfs).to.be.an.instanceof(Function); }); describe('the function', () => { it('should expand the prefix', () => { expect(rdfs('label')).to.deep.equal(namedNode('http://www.w3.org/2000/01/rdf-schema#label')); }); it('should expand a NamedNode prefix', () => { const rdfs = Util.prefix(namedNode('http://www.w3.org/2000/01/rdf-schema#')); expect(rdfs('label')).to.deep.equal(namedNode('http://www.w3.org/2000/01/rdf-schema#label')); }); it('should expand a Literal prefix', () => { const rdfs = Util.prefix(literal('http://www.w3.org/2000/01/rdf-schema#')); expect(rdfs('label')).to.deep.equal(namedNode('http://www.w3.org/2000/01/rdf-schema#label')); }); it('should use a custom factory when specified', () => { const factory = { namedNode: function (s) { return `n-${s}`; } }; const rdfs = Util.prefix('http://www.w3.org/2000/01/rdf-schema#', factory); expect(rdfs('label')).to.equal('n-http://www.w3.org/2000/01/rdf-schema#label'); }); }); }); describe('prefixes', () => { describe('called without arguments', () => { const prefixes = Util.prefixes(); it('should return a function', () => { expect(prefixes).to.be.an.instanceof(Function); }); describe('the function', () => { it('should not expand non-registered prefixes', () => { expect(() => { prefixes('foo'); }).to.throw('Unknown prefix: foo'); }); it('should allow registering prefixes', () => { const p = prefixes('rdfs', 'http://www.w3.org/2000/01/rdf-schema#'); const rdfs = prefixes('rdfs'); expect(p).to.exist; expect(p).to.equal(rdfs); }); it('should expand the newly registered prefix', () => { const rdfs = prefixes('rdfs'); expect(rdfs('label')).to.deep.equal(namedNode('http://www.w3.org/2000/01/rdf-schema#label')); }); }); }); describe('called with a hash of prefixes', () => { const prefixes = Util.prefixes({ rdfs: 'http://www.w3.org/2000/01/rdf-schema#', owl: 'http://www.w3.org/2002/07/owl#', }); it('should return a function', () => { expect(prefixes).to.be.an.instanceof(Function); }); describe('the function', () => { it('should expand registered prefixes', () => { expect(prefixes('rdfs')('label')).to.deep.equal(namedNode('http://www.w3.org/2000/01/rdf-schema#label')); expect(prefixes('owl')('sameAs')).to.deep.equal(namedNode('http://www.w3.org/2002/07/owl#sameAs')); }); it('should not expand non-registered prefixes', () => { expect(() => { prefixes('foo'); }).to.throw('Unknown prefix: foo'); }); it('should allow registering prefixes', () => { const p = prefixes('my', 'http://example.org/#'); const my = prefixes('my'); expect(p).to.exist; expect(p).to.equal(my); }); it('should expand the newly registered prefix', () => { const my = prefixes('my'); expect(my('me')).to.deep.equal(namedNode('http://example.org/#me')); }); }); }); describe('called with a custom factory', () => { const factory = { namedNode: function (s) { return `n-${s}`; } }; const prefixes = Util.prefixes({ my: 'http://example.org/#' }, factory); it('should use the custom factory', () => { expect(prefixes('my')('foo')).to.equal('n-http://example.org/#foo'); }); }); }); }); N3.js-1.16.3/test/N3Writer-test.js000066400000000000000000001031661433366257500164710ustar00rootroot00000000000000import { Writer, NamedNode, BlankNode, Literal, Quad, termFromId, } from '../src/'; import namespaces from '../src/IRIs'; const { xsd } = namespaces; describe('Writer', () => { describe('The Writer export', () => { it('should be a function', () => { Writer.should.be.a('function'); }); it('should be a Writer constructor', () => { new Writer().should.be.an.instanceof(Writer); }); }); describe('A Writer instance', () => { it('should serialize a single triple', () => { const writer = new Writer(); writer.quadToString(new NamedNode('a'), new NamedNode('b'), new NamedNode('c')).should.equal(' .\n'); }); it('should serialize a single quad', () => { const writer = new Writer(); writer.quadToString(new NamedNode('a'), new NamedNode('b'), new NamedNode('c'), new NamedNode('g')).should.equal(' .\n'); }); it('should serialize an array of triples', () => { const writer = new Writer(); const triples = [new Quad(new NamedNode('a'), new NamedNode('b'), new NamedNode('c')), new Quad(new NamedNode('d'), new NamedNode('e'), new NamedNode('f'))]; writer.quadsToString(triples).should.equal(' .\n .\n'); }); it('should serialize 0 triples', shouldSerialize('')); it('should serialize 1 triple', shouldSerialize(['abc', 'def', 'ghi'], ' .\n')); it('should serialize 2 triples', shouldSerialize(['abc', 'def', 'ghi'], ['jkl', 'mno', 'pqr'], ' .\n' + ' .\n')); it('should serialize 3 triples', shouldSerialize(['abc', 'def', 'ghi'], ['jkl', 'mno', 'pqr'], ['stu', 'vwx', 'yz'], ' .\n' + ' .\n' + ' .\n')); it('should serialize a literal', shouldSerialize(['a', 'b', '"cde"'], ' "cde".\n')); it('should serialize a literal with a type', shouldSerialize(['a', 'b', '"cde"^^fgh'], ' "cde"^^.\n')); it('should serialize a literal with a language', shouldSerialize(['a', 'b', '"cde"@en-us'], ' "cde"@en-us.\n')); // e.g. http://vocab.getty.edu/aat/300264727.ttl it('should serialize a literal with an artificial language', shouldSerialize(['a', 'b', '"cde"@qqq-002'], ' "cde"@qqq-002.\n')); it('should serialize a literal containing a single quote', shouldSerialize(['a', 'b', '"c\'de"'], ' "c\'de".\n')); it('should serialize a literal containing a double quote', shouldSerialize(['a', 'b', '"c"de"'], ' "c\\"de".\n')); it('should serialize a literal containing a backspace', shouldSerialize(['a', 'b', '"c\\de"'], ' "c\\\\de".\n')); it('should serialize a literal containing a tab character', shouldSerialize(['a', 'b', '"c\tde"'], ' "c\\tde".\n')); it('should serialize a literal containing a newline character', shouldSerialize(['a', 'b', '"c\nde"'], ' "c\\nde".\n')); it('should serialize a literal containing a cariage return character', shouldSerialize(['a', 'b', '"c\rde"'], ' "c\\rde".\n')); it('should serialize a literal containing a backspace character', shouldSerialize(['a', 'b', '"c\bde"'], ' "c\\bde".\n')); it('should serialize a literal containing a form feed character', shouldSerialize(['a', 'b', '"c\fde"'], ' "c\\fde".\n')); it('should serialize a literal containing a line separator', shouldSerialize(['a', 'b', '"c\u2028de"'], ' "c\u2028de".\n')); it('should serialize a literal containing a paragraph separator', shouldSerialize(['a', 'b', '"c\u2029de"'], ' "c\u2029de".\n')); it('should serialize a literal containing special unicode characters', shouldSerialize(['a', 'b', '"c\u0000\u0001"'], ' "c\\u0000\\u0001".\n')); it('should serialize a true boolean literal', shouldSerialize(['a', 'b', `"true"^^${xsd.boolean}`], ' true.\n')); it('should serialize a false boolean literal', shouldSerialize(['a', 'b', `"false"^^${xsd.boolean}`], ' false.\n')); it('should serialize an invalid boolean literal', shouldSerialize(['a', 'b', `"invalid"^^${xsd.boolean}`], ` "invalid"^^<${xsd.boolean}>.\n`)); it('should serialize an integer literal', shouldSerialize(['a', 'b', `"123"^^${xsd.integer}`], ' 123.\n')); it('should serialize a positive integer literal', shouldSerialize(['a', 'b', `"+123"^^${xsd.integer}`], ' +123.\n')); it('should serialize a negative integer literal', shouldSerialize(['a', 'b', `"-123"^^${xsd.integer}`], ' -123.\n')); it('should serialize an invalid integer literal', shouldSerialize(['a', 'b', `"invalid"^^${xsd.integer}`], ` "invalid"^^<${xsd.integer}>.\n`)); it('should serialize a decimal literal', shouldSerialize(['a', 'b', `"123.456"^^${xsd.decimal}`], ' 123.456.\n')); it('should serialize a positive decimal literal', shouldSerialize(['a', 'b', `"+123.456"^^${xsd.decimal}`], ' +123.456.\n')); it('should serialize a negative decimal literal', shouldSerialize(['a', 'b', `"-123.456"^^${xsd.decimal}`], ' -123.456.\n')); it('should serialize an invalid decimal literal', shouldSerialize(['a', 'b', `"invalid"^^${xsd.decimal}`], ` "invalid"^^<${xsd.decimal}>.\n`)); it('should serialize a double literal', shouldSerialize(['a', 'b', `"123.456E10"^^${xsd.double}`], ' 123.456E10.\n')); it('should serialize a positive double literal', shouldSerialize(['a', 'b', `"+123.456E10"^^${xsd.double}`], ' +123.456E10.\n')); it('should serialize a negative double literal', shouldSerialize(['a', 'b', `"-123.456E10"^^${xsd.double}`], ' -123.456E10.\n')); it('should serialize an invalid double literal', shouldSerialize(['a', 'b', `"invalid"^^${xsd.double}`], ` "invalid"^^<${xsd.double}>.\n`)); it('should serialize blank nodes', shouldSerialize(['_:a', 'b', { termType: 'BlankNode', value: 'c' }], '_:a _:c.\n')); it('should not leave leading whitespace if the prefix set is empty', shouldSerialize({}, ['a', 'b', 'c'], ' .\n')); it('should serialize prefixes', shouldSerialize({ prefixes: { a: 'http://a.org/', b: new NamedNode('http://a.org/b#'), c: 'http://a.org/c' } }, '@prefix a: .\n' + '@prefix b: .\n' + '@prefix c: .\n\n')); it('should use prefixes when possible', shouldSerialize({ prefixes: { a: 'http://a.org/', b: 'http://a.org/b#', c: 'http://a.org/b' } }, ['http://a.org/bc', 'http://a.org/b#ef', 'http://a.org/bhi'], ['http://a.org/bc/de', 'http://a.org/b#e#f', 'http://a.org/b#x/t'], ['http://a.org/3a', 'http://a.org/b#3a', 'http://a.org/b#a3'], '@prefix a: .\n' + '@prefix b: .\n' + '@prefix c: .\n\n' + 'a:bc b:ef a:bhi.\n' + ' .\n' + ' b:a3.\n')); it('should expand prefixes when possible', shouldSerialize({ prefixes: { a: 'http://a.org/', b: 'http://a.org/b#' } }, ['a:bc', 'b:ef', 'c:bhi'], '@prefix a: .\n' + '@prefix b: .\n\n' + 'a:bc b:ef .\n')); it('should not repeat the same subjects', shouldSerialize(['abc', 'def', 'ghi'], ['abc', 'mno', 'pqr'], ['stu', 'vwx', 'yz'], ' ;\n' + ' .\n' + ' .\n')); it('should not repeat the same predicates', shouldSerialize(['abc', 'def', 'ghi'], ['abc', 'def', 'pqr'], ['abc', 'bef', 'ghi'], ['abc', 'bef', 'pqr'], ['stu', 'bef', 'yz'], ' , ;\n' + ' , .\n' + ' .\n')); it('should write rdf:type as "a"', shouldSerialize(['abc', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type', 'def'], ' a .\n')); it('should serialize a graph with 1 triple', shouldSerialize(['abc', 'def', 'ghi', 'xyz'], ' {\n' + ' \n' + '}\n')); it('should serialize a graph with 3 triples', shouldSerialize(['abc', 'def', 'ghi', 'xyz'], ['jkl', 'mno', 'pqr', 'xyz'], ['stu', 'vwx', 'yz', 'xyz'], ' {\n' + ' .\n' + ' .\n' + ' \n' + '}\n')); it('should serialize three graphs', shouldSerialize(['abc', 'def', 'ghi', 'xyz'], ['jkl', 'mno', 'pqr', ''], ['stu', 'vwx', 'yz', 'abc'], ' {\n \n}\n' + ' .\n' + ' {\n \n}\n')); it('should output 8-bit unicode characters as escape sequences', shouldSerialize(['\ud835\udc00', '\ud835\udc00', '"\ud835\udc00"^^\ud835\udc00', '\ud835\udc00'], '<\\U0001d400> {\n<\\U0001d400> <\\U0001d400> "\\U0001d400"^^<\\U0001d400>\n}\n')); it('should not use escape sequences in blank nodes', shouldSerialize(['_:\ud835\udc00', '_:\ud835\udc00', '_:\ud835\udc00', '_:\ud835\udc00'], '_:\ud835\udc00 {\n_:\ud835\udc00 _:\ud835\udc00 _:\ud835\udc00\n}\n')); it('calls the done callback when ending the outputstream errors', done => { const writer = new Writer({ write: function () {}, end: function () { throw new Error('error'); }, }); writer.end(done); }); it('sends output through end when no stream argument is given', done => { const writer = new Writer(); let notCalled = true; writer.addQuad(new Quad(new NamedNode('a'), new NamedNode('b'), new NamedNode('c')), () => { notCalled = false; }); writer.end((error, output) => { output.should.equal(' .\n'); done(notCalled || error); }); }); it('respects the prefixes argument when no stream argument is given', done => { const writer = new Writer({ prefixes: { a: 'b#' } }); writer.addQuad(new Quad(new NamedNode('b#a'), new NamedNode('b#b'), new NamedNode('b#c'))); writer.end((error, output) => { output.should.equal('@prefix a: .\n\na:a a:b a:c.\n'); done(error); }); }); it('ignores an empty prefix list', done => { const writer = new Writer(); writer.addPrefixes({}); writer.addQuad(new Quad(new NamedNode('b#a'), new NamedNode('b#b'), new NamedNode('b#c'))); writer.end((error, output) => { output.should.equal(' .\n'); done(error); }); }); it('should serialize triples of graph with prefix for local names that begin with underscore', done => { const writer = new Writer(); writer.addPrefix('a', 'b#'); writer.addQuad(new Quad(new NamedNode('b#_a'), new NamedNode('b#b'), new NamedNode('b#c'), new NamedNode('b#g'))); writer.end((error, output) => { output.should.equal('@prefix a: .\n\na:g {\na:_a a:b a:c\n}\n'); done(error); }); }); it('serializes triples of a graph with a prefix declaration in between', done => { const writer = new Writer(); writer.addQuad(new Quad(new NamedNode('b#a'), new NamedNode('b#b'), new NamedNode('b#c'))); writer.addPrefix('a', 'b#'); writer.addQuad(new Quad(new NamedNode('b#a'), new NamedNode('b#b'), new NamedNode('b#c'), new NamedNode('b#g'))); writer.addPrefix('d', 'e#'); writer.addQuad({ subject: new NamedNode('b#a'), predicate: new NamedNode('b#b'), object: new NamedNode('b#d'), graph: new NamedNode('b#g') }); writer.end((error, output) => { output.should.equal(' .\n' + '@prefix a: .\n\na:g {\na:a a:b a:c\n}\n' + '@prefix d: .\n\na:g {\na:a a:b a:d\n}\n'); done(error); }); }); it('should not write prefixes in N-Triples mode', done => { const writer = new Writer({ format: 'N-Triples', prefixes: { a: 'b#' } }); let called = false; function callback() { called = true; } writer.addPrefix('c', 'd#'); writer.addQuad(new NamedNode('a'), new NamedNode('b'), new Literal('"c"')); writer.addQuad(new NamedNode('a'), new NamedNode('b'), new Literal(`"1"^^${xsd.integer}`)); writer.addPrefix('e', 'f#', callback); writer.end((error, output) => { called.should.be.true; output.should.equal(` "c" .\n "1"^^<${xsd.integer}> .\n`); done(error); }); }); it('uses a base IRI when given', done => { const writer = new Writer({ baseIRI: 'http://example.org/foo/' }); writer.addQuad(new Quad( new NamedNode('http://example.org/foo/'), new NamedNode('http://example.org/foo/#b'), new NamedNode('http://example.org/foo/cdeFgh/ijk'))); writer.end((error, output) => { output.should.equal('<> <#b> .\n'); done(error); }); }); it('does not use partially match base IRIs', done => { const writer = new Writer({ baseIRI: 'https://pod.example/profile/card' }); writer.addQuad(new Quad( new NamedNode('https://pod.example/profile/card#me'), new NamedNode('http://www.w3.org/2002/07/owl#sameAs'), new NamedNode('https://pod.example/profile/card-1234.ttl'))); writer.end((error, output) => { output.should.equal('<#me> .\n'); done(error); }); }); it('should accept triples with separated components', done => { const writer = new Writer(); writer.addQuad(new NamedNode('a'), new NamedNode('b'), new NamedNode('c')); writer.addQuad(new NamedNode('a'), new NamedNode('b'), new NamedNode('d')); writer.end((error, output) => { output.should.equal(' , .\n'); done(error); }); }); it('should accept quads with separated components', done => { const writer = new Writer(); writer.addQuad(new NamedNode('a'), new NamedNode('b'), new NamedNode('c'), new NamedNode('g')); writer.addQuad(new NamedNode('a'), new NamedNode('b'), new NamedNode('d'), new NamedNode('g')); writer.end((error, output) => { output.should.equal(' {\n , \n}\n'); done(error); }); }); it('should serialize triples with an empty blank node as object', done => { const writer = new Writer(); writer.addQuad(new NamedNode('a1'), new NamedNode('b'), writer.blank()); writer.addQuad(new NamedNode('a2'), new NamedNode('b'), writer.blank([])); writer.end((error, output) => { output.should.equal(' [].\n' + ' [].\n'); done(error); }); }); it('should serialize triples with a one-triple blank node as object', done => { const writer = new Writer(); writer.addQuad(new NamedNode('a1'), new NamedNode('b'), writer.blank(new NamedNode('d'), new NamedNode('e'))); writer.addQuad(new NamedNode('a2'), new NamedNode('b'), writer.blank({ predicate: new NamedNode('d'), object: new NamedNode('e') })); writer.addQuad(new NamedNode('a3'), new NamedNode('b'), writer.blank([{ predicate: new NamedNode('d'), object: new NamedNode('e') }])); writer.end((error, output) => { output.should.equal(' [ ].\n' + ' [ ].\n' + ' [ ].\n'); done(error); }); }); it('should serialize triples with a two-triple blank node as object', done => { const writer = new Writer(); writer.addQuad(new NamedNode('a'), new NamedNode('b'), writer.blank([ { predicate: new NamedNode('d'), object: new NamedNode('e') }, { predicate: new NamedNode('f'), object: new Literal('"g"') }, ])); writer.end((error, output) => { output.should.equal(' [\n' + ' ;\n' + ' "g"\n' + '].\n'); done(error); }); }); it('should serialize triples with a three-triple blank node as object', done => { const writer = new Writer(); writer.addQuad(new NamedNode('a'), new NamedNode('b'), writer.blank([ { predicate: new NamedNode('d'), object: new NamedNode('e') }, { predicate: new NamedNode('f'), object: new Literal('"g"') }, { predicate: new NamedNode('h'), object: new NamedNode('i') }, ])); writer.end((error, output) => { output.should.equal(' [\n' + ' ;\n' + ' "g";\n' + ' \n' + '].\n'); done(error); }); }); it('should serialize triples with predicate-sharing blank node triples as object', done => { const writer = new Writer(); writer.addQuad(new NamedNode('a'), new NamedNode('b'), writer.blank([ { predicate: new NamedNode('d'), object: new NamedNode('e') }, { predicate: new NamedNode('d'), object: new NamedNode('f') }, { predicate: new NamedNode('g'), object: new NamedNode('h') }, { predicate: new NamedNode('g'), object: new NamedNode('i') }, ])); writer.end((error, output) => { output.should.equal(' [\n' + ' , ;\n' + ' , \n' + '].\n'); done(error); }); }); it('should serialize triples with nested blank nodes as object', done => { const writer = new Writer(); writer.addQuad(new NamedNode('a1'), new NamedNode('b'), writer.blank([ { predicate: new NamedNode('d'), object: writer.blank() }, ])); writer.addQuad(new NamedNode('a2'), new NamedNode('b'), writer.blank([ { predicate: new NamedNode('d'), object: writer.blank(new NamedNode('e'), new NamedNode('f')) }, { predicate: new NamedNode('g'), object: writer.blank(new NamedNode('h'), new Literal('"i"')) }, ])); writer.addQuad(new NamedNode('a3'), new NamedNode('b'), writer.blank([ { predicate: new NamedNode('d'), object: writer.blank([ { predicate: new NamedNode('g'), object: writer.blank(new NamedNode('h'), new NamedNode('i')) }, { predicate: new NamedNode('j'), object: writer.blank(new NamedNode('k'), new Literal('"l"')) }, ]) }, ])); writer.end((error, output) => { output.should.equal(' [\n' + ' []\n' + '].\n' + ' [\n' + ' [ ];\n' + ' [ "i" ]\n' + '].\n' + ' [\n' + ' [\n' + ' [ ];\n' + ' [ "l" ]\n' + ']\n' + '].\n'); done(error); }); }); it('should serialize triples with an empty blank node as subject', done => { const writer = new Writer(); writer.addQuad(writer.blank(), new NamedNode('b'), new NamedNode('c')); writer.addQuad(writer.blank([]), new NamedNode('b'), new NamedNode('c')); writer.end((error, output) => { output.should.equal('[] .\n' + '[] .\n'); done(error); }); }); it('should serialize triples with a one-triple blank node as subject', done => { const writer = new Writer(); writer.addQuad(writer.blank(new NamedNode('a'), new NamedNode('b')), new NamedNode('c'), new NamedNode('d')); writer.addQuad(writer.blank({ predicate: new NamedNode('a'), object: new NamedNode('b') }), new NamedNode('c'), new NamedNode('d')); writer.addQuad(writer.blank([{ predicate: new NamedNode('a'), object: new NamedNode('b') }]), new NamedNode('c'), new NamedNode('d')); writer.end((error, output) => { output.should.equal('[ ] .\n' + '[ ] .\n' + '[ ] .\n'); done(error); }); }); it('should serialize triples with an empty blank node as graph', done => { const writer = new Writer(); writer.addQuad(new NamedNode('a'), new NamedNode('b'), new NamedNode('c'), writer.blank()); writer.addQuad(new NamedNode('a'), new NamedNode('b'), new NamedNode('c'), writer.blank([])); writer.end((error, output) => { output.should.equal('[] {\n \n}\n' + '[] {\n \n}\n'); done(error); }); }); it('should serialize triples with an empty list as object', done => { const writer = new Writer(); writer.addQuad(new NamedNode('a1'), new NamedNode('b'), writer.list()); writer.addQuad(new NamedNode('a2'), new NamedNode('b'), writer.list([])); writer.end((error, output) => { output.should.equal(' ().\n' + ' ().\n'); done(error); }); }); it('should serialize triples with a one-element list as object', done => { const writer = new Writer(); writer.addQuad(new NamedNode('a1'), new NamedNode('b'), writer.list([new NamedNode('c')])); writer.addQuad(new NamedNode('a2'), new NamedNode('b'), writer.list([new Literal('"c"')])); writer.end((error, output) => { output.should.equal(' ().\n' + ' ("c").\n'); done(error); }); }); it('should serialize triples with a three-element list as object', done => { const writer = new Writer(); writer.addQuad(new NamedNode('a1'), new NamedNode('b'), writer.list([new NamedNode('c'), new NamedNode('d'), new NamedNode('e')])); writer.addQuad(new NamedNode('a2'), new NamedNode('b'), writer.list([new Literal('"c"'), new Literal('"d"'), new Literal('"e"')])); writer.end((error, output) => { output.should.equal(' ( ).\n' + ' ("c" "d" "e").\n'); done(error); }); }); it('should serialize triples with an empty list as subject', done => { const writer = new Writer(); writer.addQuad(writer.list(), new NamedNode('b1'), new NamedNode('c')); writer.addQuad(writer.list([]), new NamedNode('b2'), new NamedNode('c')); writer.end((error, output) => { output.should.equal('() .\n' + '() .\n'); done(error); }); }); it('should serialize triples with a one-element list as subject', done => { const writer = new Writer(); writer.addQuad(writer.list([new NamedNode('a')]), new NamedNode('b1'), new NamedNode('c')); writer.addQuad(writer.list([new NamedNode('a')]), new NamedNode('b2'), new NamedNode('c')); writer.end((error, output) => { output.should.equal('() .\n' + '() .\n'); done(error); }); }); it('should serialize triples with a three-element list as subject', done => { const writer = new Writer(); writer.addQuad(writer.list([new NamedNode('a1'), new Literal('"b"'), new Literal('"c"')]), new NamedNode('d'), new NamedNode('e')); writer.end((error, output) => { output.should.equal('( "b" "c") .\n'); done(error); }); }); it('should serialize subject and object triples passed by options.listHeads', done => { const lists = { l1: [new NamedNode('c'), new NamedNode('d'), new NamedNode('e')], l2: [new Literal('c'), new Literal('d'), new Literal('e')], }; const writer = new Writer({ lists }); writer.addQuad(new BlankNode('l1'), new NamedNode('b'), new BlankNode('l2')); writer.addQuad(new NamedNode('a3'), new NamedNode('b'), new BlankNode('m3')); writer.end((error, output) => { output.should.equal('( ) ("c" "d" "e").\n' + ' _:m3.\n'); done(error); }); }); it('should accept triples in bulk', done => { const writer = new Writer(); writer.addQuads([new Quad(new NamedNode('a'), new NamedNode('b'), new NamedNode('c')), new Quad(new NamedNode('a'), new NamedNode('b'), new NamedNode('d'))]); writer.end((error, output) => { output.should.equal(' , .\n'); done(error); }); }); it('should not allow writing after end', done => { const writer = new Writer(); writer.addQuad(new Quad(new NamedNode('a'), new NamedNode('b'), new NamedNode('c'))); writer.end(); writer.addQuad(new Quad(new NamedNode('d'), new NamedNode('e'), new NamedNode('f')), error => { error.should.be.an.instanceof(Error); error.should.have.property('message', 'Cannot write because the writer has been closed.'); done(); }); }); it('should write simple triples in N-Quads mode', done => { const writer = new Writer({ format: 'N-Quads' }); writer.addQuad(new NamedNode('a'), new NamedNode('b'), new NamedNode('c')); writer.addQuad(new NamedNode('a'), new NamedNode('b'), new NamedNode('d')); writer.end((error, output) => { output.should.equal(' .\n .\n'); done(error); }); }); it('should write simple quads in N-Quads mode', done => { const writer = new Writer({ format: 'N-Quads' }); let called = false; function callback() { called = true; } writer.addQuad(new NamedNode('a'), new NamedNode('b'), new NamedNode('c'), callback); writer.addQuad(new NamedNode('a'), new NamedNode('b'), new NamedNode('d'), new NamedNode('g')); writer.end((error, output) => { called.should.be.true; output.should.equal(' .\n .\n'); done(error); }); }); it('should end when the end option is not set', done => { const outputStream = new QuickStream(), writer = new Writer(outputStream, {}); outputStream.should.have.property('ended', false); writer.end(() => { outputStream.should.have.property('ended', true); done(); }); }); it('should end when the end option is set to true', done => { const outputStream = new QuickStream(), writer = new Writer(outputStream, { end: true }); outputStream.should.have.property('ended', false); writer.end(() => { outputStream.should.have.property('ended', true); done(); }); }); it('should not end when the end option is set to false', done => { const outputStream = new QuickStream(), writer = new Writer(outputStream, { end: false }); outputStream.should.have.property('ended', false); writer.end(() => { outputStream.should.have.property('ended', false); done(); }); }); it('should serialize a triple with a triple with mixed component types as subject', () => { const writer = new Writer(); writer.quadToString(new Quad(new BlankNode('b1'), new NamedNode('b'), new Literal('l1')), new NamedNode('b'), new NamedNode('c')).should.equal('<<_:b1 "l">> .\n'); }); it('should serialize a triple with a triple with iris as subject', () => { const writer = new Writer(); writer.quadToString(new Quad(new NamedNode('a'), new NamedNode('b'), new NamedNode('c')), new NamedNode('b'), new NamedNode('c')).should.equal('<< >> .\n'); }); it('should serialize a triple with a triple with blanknodes as subject', () => { const writer = new Writer(); writer.quadToString(new Quad(new BlankNode('b1'), new BlankNode('b2'), new BlankNode('b3')), new NamedNode('b'), new NamedNode('c')).should.equal('<<_:b1 _:b2 _:b3>> .\n'); }); it('should serialize a triple with a triple as object', () => { const writer = new Writer(); writer.quadToString(new NamedNode('a'), new NamedNode('b'), new Quad(new BlankNode('b1'), new NamedNode('b'), new Literal('l1'))).should.equal(' <<_:b1 "l">> .\n'); }); it('should serialize a triple with a triple with iris as object', () => { const writer = new Writer(); writer.quadToString(new NamedNode('a'), new NamedNode('b'), new Quad(new NamedNode('a'), new NamedNode('b'), new NamedNode('c'))).should.equal(' << >> .\n'); }); it('should serialize a triple with a triple with blanknodes as object', () => { const writer = new Writer(); writer.quadToString(new NamedNode('a'), new NamedNode('b'), new Quad(new BlankNode('b1'), new BlankNode('b2'), new BlankNode('b3'))).should.equal(' <<_:b1 _:b2 _:b3>> .\n'); }); it('should serialize a quad with a triple with mixed component types as subject', () => { const writer = new Writer(); writer.quadToString(new Quad(new NamedNode('a'), new NamedNode('b'), new NamedNode('c')), new NamedNode('b'), new NamedNode('c'), new NamedNode('g')).should.equal('<< >> .\n'); }); it('should serialize a quad with a triple as object', () => { const writer = new Writer(); writer.quadToString(new NamedNode('a'), new NamedNode('b'), new Quad(new NamedNode('a'), new NamedNode('b'), new NamedNode('c')), new NamedNode('g')).should.equal(' << >> .\n'); }); it('should serialize a quad with a quad as subject', () => { const writer = new Writer(); writer.quadToString(new Quad(new NamedNode('a'), new NamedNode('b'), new NamedNode('c'), new NamedNode('g')), new NamedNode('b'), new NamedNode('c'), new NamedNode('g')).should.equal('<< >> .\n'); }); it('should serialize a quad with a quad as object', () => { const writer = new Writer(); writer.quadToString(new NamedNode('a'), new NamedNode('b'), new Quad(new NamedNode('a'), new NamedNode('b'), new NamedNode('c'), new NamedNode('g')), new NamedNode('g')).should.equal(' << >> .\n'); }); it('should serialize a triple with a quad as subject', () => { const writer = new Writer(); writer.quadToString(new Quad(new NamedNode('a'), new NamedNode('b'), new NamedNode('c'), new NamedNode('g')), new NamedNode('b'), new NamedNode('c')).should.equal('<< >> .\n'); }); it('should serialize a triple with a quad as object', () => { const writer = new Writer(); writer.quadToString(new NamedNode('a'), new NamedNode('b'), new Quad(new NamedNode('a'), new NamedNode('b'), new NamedNode('c'), new NamedNode('g'))).should.equal(' << >> .\n'); }); }); }); function shouldSerialize(/* prefixes?, tripleArrays..., expectedResult */) { const tripleArrays = Array.prototype.slice.call(arguments), expectedResult = tripleArrays.pop(), prefixes = tripleArrays[0] instanceof Array ? null : tripleArrays.shift(); return function (done) { const outputStream = new QuickStream(), writer = new Writer(outputStream, prefixes); (function next() { const item = tripleArrays.shift(); if (item) { const subject = typeof item[0] === 'string' ? termFromId(item[0]) : item[0]; const predicate = typeof item[1] === 'string' ? termFromId(item[1]) : item[1]; const object = typeof item[2] === 'string' ? termFromId(item[2]) : item[2]; const graph = typeof item[3] === 'string' ? termFromId(item[3]) : item[3]; writer.addQuad(new Quad(subject, predicate, object, graph), next); } else writer.end(error => { try { outputStream.result.should.equal(expectedResult); outputStream.should.have.property('ended', true); done(error); } catch (e) { done(e); } }); })(); }; } function QuickStream() { const stream = { ended: false }; let buffer = ''; stream.write = function (chunk, encoding, callback) { buffer += chunk; callback && callback(); }; stream.end = function (callback) { stream.ended = true; stream.result = buffer; buffer = null; callback(); }; return stream; } N3.js-1.16.3/test/NamedNode-test.js000066400000000000000000000046431433366257500166460ustar00rootroot00000000000000import { NamedNode, Term } from '../src/'; describe('NamedNode', () => { describe('The NamedNode module', () => { it('should be a function', () => { NamedNode.should.be.a('function'); }); it('should be a NamedNode constructor', () => { new NamedNode().should.be.an.instanceof(NamedNode); }); it('should be a Term constructor', () => { new NamedNode().should.be.an.instanceof(Term); }); }); describe('A NamedNode instance created from an IRI', () => { let namedNode; before(() => { namedNode = new NamedNode('http://example.org/foo#bar'); }); it('should be a NamedNode', () => { namedNode.should.be.an.instanceof(NamedNode); }); it('should be a Term', () => { namedNode.should.be.an.instanceof(Term); }); it('should have term type "NamedNode"', () => { namedNode.termType.should.equal('NamedNode'); }); it('should have the IRI as value', () => { namedNode.should.have.property('value', 'http://example.org/foo#bar'); }); it('should have the IRI as id', () => { namedNode.should.have.property('id', 'http://example.org/foo#bar'); }); it('should equal a NamedNode instance with the same IRI', () => { namedNode.equals(new NamedNode('http://example.org/foo#bar')).should.be.true; }); it('should equal an object with the same term type and value', () => { namedNode.equals({ termType: 'NamedNode', value: 'http://example.org/foo#bar', }).should.be.true; }); it('should not equal a falsy object', () => { namedNode.equals(null).should.be.false; }); it('should not equal a NamedNode instance with another IRI', () => { namedNode.equals(new NamedNode('http://example.org/other')).should.be.false; }); it('should not equal an object with the same term type but a different value', () => { namedNode.equals({ termType: 'NamedNode', value: 'http://example.org/other', }).should.be.false; }); it('should not equal an object with a different term type but the same value', () => { namedNode.equals({ termType: 'BlankNode', value: 'http://example.org/foo#bar', }).should.be.false; }); it('should provide a JSON representation', () => { namedNode.toJSON().should.deep.equal({ termType: 'NamedNode', value: 'http://example.org/foo#bar', }); }); }); }); N3.js-1.16.3/test/Quad-test.js000066400000000000000000000204651433366257500157060ustar00rootroot00000000000000import { Quad, Triple, DefaultGraph, termFromId, Term } from '../src/'; describe('Quad', () => { describe('The Quad module', () => { it('should be a function', () => { Quad.should.be.a('function'); }); it('should be a Quad constructor', () => { new Quad().should.be.an.instanceof(Quad); }); it('should equal Triple', () => { Quad.should.equal(Triple); }); }); describe('A Quad instance created with subject/predicate/object', () => { let quad, subject, predicate, object; before(() => { quad = new Quad( subject = termFromId('s'), predicate = termFromId('p'), object = termFromId('o') ); }); it('should be a Quad', () => { quad.should.be.an.instanceof(Quad); }); it('should be a Term', () => { quad.should.be.an.instanceof(Term); }); it('should have the correct termType', () => { quad.termType.should.equal('Quad'); }); it('should have the correct subject', () => { quad.subject.should.equal(subject); }); it('should have the correct predicate', () => { quad.predicate.should.equal(predicate); }); it('should have the correct object', () => { quad.object.should.equal(object); }); it('should have the default graph', () => { quad.graph.should.equal(new DefaultGraph()); }); it('should equal a quad with the same components', () => { quad.equals({ subject: subject, predicate: predicate, object: object, graph: new DefaultGraph(), }).should.be.true; }); it('should not equal a quad with a different subject', () => { quad.equals({ subject: termFromId('x'), predicate: predicate, object: object, graph: new DefaultGraph(), }).should.be.false; }); it('should not equal a quad with a different predicate', () => { quad.equals({ subject: subject, predicate: termFromId('x'), object: object, graph: new DefaultGraph(), }).should.be.false; }); it('should not equal a quad with a different object', () => { quad.equals({ subject: subject, predicate: predicate, object: termFromId('x'), graph: new DefaultGraph(), }).should.be.false; }); it('should not equal a quad with a different graph', () => { quad.equals({ subject: subject, predicate: predicate, object: object, graph: termFromId('x'), }).should.be.false; }); it('should provide a JSON representation', () => { quad.toJSON().should.deep.equal({ termType: 'Quad', subject: { termType: 'NamedNode', value: 's' }, predicate: { termType: 'NamedNode', value: 'p' }, object: { termType: 'NamedNode', value: 'o' }, graph: { termType: 'DefaultGraph', value: '' }, }); }); }); describe('A Quad instance created with subject/predicate/object/graph', () => { let quad, subject, predicate, object, graph; before(() => { quad = new Quad( subject = termFromId('s'), predicate = termFromId('p'), object = termFromId('o'), graph = termFromId('g') ); }); it('should be a Quad', () => { quad.should.be.an.instanceof(Quad); }); it('should be a Term', () => { quad.should.be.an.instanceof(Term); }); it('should have the correct termType', () => { quad.termType.should.equal('Quad'); }); it('should have the correct subject', () => { quad.subject.should.equal(subject); }); it('should have the correct predicate', () => { quad.predicate.should.equal(predicate); }); it('should have the correct object', () => { quad.object.should.equal(object); }); it('should have the default graph', () => { quad.graph.should.equal(graph); }); it('should equal a quad with the same components', () => { quad.equals({ subject: subject, predicate: predicate, object: object, graph: graph, }).should.be.true; }); it('should not equal a quad with a different subject', () => { quad.equals({ subject: termFromId('x'), predicate: predicate, object: object, graph: graph, }).should.be.false; }); it('should not equal a quad with a different predicate', () => { quad.equals({ subject: subject, predicate: termFromId('x'), object: object, graph: graph, }).should.be.false; }); it('should not equal a quad with a different object', () => { quad.equals({ subject: subject, predicate: predicate, object: termFromId('x'), graph: graph, }).should.be.false; }); it('should not equal a quad with a different graph', () => { quad.equals({ subject: subject, predicate: predicate, object: object, graph: termFromId('x'), }).should.be.false; }); it('should provide a JSON representation', () => { quad.toJSON().should.deep.equal({ termType: 'Quad', subject: { termType: 'NamedNode', value: 's' }, predicate: { termType: 'NamedNode', value: 'p' }, object: { termType: 'NamedNode', value: 'o' }, graph: { termType: 'NamedNode', value: 'g' }, }); }); }); describe('A Quad instance with nested quads', () => { let quad, subject, predicate, object; before(() => { quad = new Quad( subject = termFromId('<<_:n3-123 ?var-a ?var-b _:n3-000>>'), predicate = termFromId('p'), object = termFromId('<>') ); }); it('should be a Quad', () => { quad.should.be.an.instanceof(Quad); }); it('should be a Term', () => { quad.should.be.an.instanceof(Term); }); it('should have the correct termType', () => { quad.termType.should.equal('Quad'); }); it('should have the correct subject', () => { quad.subject.should.equal(subject); }); it('should have the correct predicate', () => { quad.predicate.should.equal(predicate); }); it('should have the correct object', () => { quad.object.should.equal(object); }); it('should have the default graph', () => { quad.graph.should.equal(new DefaultGraph()); }); it('should equal a quad with the same components', () => { quad.equals({ subject: subject, predicate: predicate, object: object, graph: new DefaultGraph(), }).should.be.true; }); it('should not equal a quad with a different subject', () => { quad.equals({ termType: 'Quad', value: '', subject: termFromId('x'), predicate: predicate, object: object, graph: new DefaultGraph(), }).should.be.false; }); it('should not equal a quad with a different predicate', () => { quad.equals({ termType: 'Quad', value: '', subject: subject, predicate: termFromId('x'), object: object, graph: new DefaultGraph(), }).should.be.false; }); it('should not equal a quad with a different object', () => { quad.equals({ termType: 'Quad', value: '', subject: subject, predicate: predicate, object: termFromId('x'), graph: new DefaultGraph(), }).should.be.false; }); it('should not equal a quad with a different graph', () => { quad.equals({ termType: 'Quad', value: '', subject: subject, predicate: predicate, object: object, graph: termFromId('x'), }).should.be.false; }); it('should provide a JSON representation', () => { quad.toJSON().should.deep.equal({ termType: 'Quad', subject: termFromId('<<_:n3-123 ?var-a ?var-b _:n3-000>>').toJSON(), predicate: { termType: 'NamedNode', value: 'p' }, object: termFromId('<>').toJSON(), graph: { termType: 'DefaultGraph', value: '' }, }); }); }); }); N3.js-1.16.3/test/Term-test.js000066400000000000000000000451071433366257500157230ustar00rootroot00000000000000import { Term, NamedNode, BlankNode, Literal, Variable, DefaultGraph, Quad, termToId, termFromId, } from '../src/'; import { escapeQuotes, unescapeQuotes, } from '../src/N3DataFactory'; describe('Term', () => { describe('The Term module', () => { it('should be a function', () => { Term.should.be.a('function'); }); it('should be a Term constructor', () => { new Term().should.be.an.instanceof(Term); }); }); describe('A Term instance', () => { it('has an integer hashCode', () => { new Term().hashCode().should.equal(0); }); }); describe('termFromId', () => { it('should create a DefaultGraph from a falsy value', () => { termFromId(null).toJSON().should.deep.equal({ termType: 'DefaultGraph', value: '', }); }); it('should create a DefaultGraph from the empty string', () => { termFromId('').toJSON().should.deep.equal({ termType: 'DefaultGraph', value: '', }); }); it('should create a NamedNode from an IRI', () => { termFromId('http://example.org/foo#bar').toJSON().should.deep.equal({ termType: 'NamedNode', value: 'http://example.org/foo#bar', }); }); it('should create a BlankNode from a string that starts with an underscore', () => { termFromId('_:b1').toJSON().should.deep.equal({ termType: 'BlankNode', value: 'b1', }); }); it('should create a Variable from a string that starts with a question mark', () => { termFromId('?v1').toJSON().should.deep.equal({ termType: 'Variable', value: 'v1', }); }); it('should create a Literal from a string that starts with a quotation mark', () => { termFromId('"abc"@en-us').toJSON().should.deep.equal({ termType: 'Literal', value: 'abc', language: 'en-us', datatype: { termType: 'NamedNode', value: 'http://www.w3.org/1999/02/22-rdf-syntax-ns#langString', }, }); }); it('should create a Quad with the default graph if the id doesnt specify the graph', () => { termFromId('<>').should.deep.equal(new Quad( new NamedNode('http://ex.org/a'), new NamedNode('http://ex.org/b'), new Literal('"abc"@en-us'), new DefaultGraph() )); }); it('should create a Quad with the correct graph if the id specifies a graph', () => { const id = '<>'; termFromId(id).should.deep.equal(new Quad( new NamedNode('http://ex.org/a'), new NamedNode('http://ex.org/b'), new Literal('"abc"@en-us'), new NamedNode('http://ex.org/d') )); }); it('should create a Quad correctly', () => { const id = '<>'; termFromId(id).should.deep.equal(new Quad( new NamedNode('http://ex.org/a'), new NamedNode('http://ex.org/b'), new NamedNode('http://ex.org/c'), new DefaultGraph() )); }); it('should create a Quad correctly', () => { const id = '<<_:n3-123 ?var-a ?var-b _:n3-000>>'; termFromId(id).should.deep.equal(new Quad( new BlankNode('n3-123'), new Variable('var-a'), new Variable('var-b'), new BlankNode('n3-000') )); }); it('should create a Quad correctly', () => { const id = '<>'; termFromId(id).should.deep.equal(new Quad( new Variable('var-a'), new Variable('var-b'), new Literal('"abc"@en-us'), new Variable('var-d') )); }); it('should create a Quad correctly', () => { const id = '<<_:n3-000 ?var-b _:n3-123 http://ex.org/d>>'; termFromId(id).should.deep.equal(new Quad( new BlankNode('n3-000'), new Variable('var-b'), new BlankNode('n3-123'), new NamedNode('http://ex.org/d') )); }); it('should create a Quad correctly from literal containing escaped quotes', () => { const id = '<<_:n3-000 ?var-b "Hello ""W""orl""d!"@en-us http://ex.org/d>>'; termFromId(id).should.deep.equal(new Quad( new BlankNode('n3-000'), new Variable('var-b'), new Literal('"Hello "W"orl"d!"@en-us'), new NamedNode('http://ex.org/d') )); }); it('should create a Quad correctly from literal containing escaped quotes', () => { const id = '<<"Hello ""W""orl""d!"@en-us http://ex.org/b http://ex.org/c>>'; termFromId(id).should.deep.equal(new Quad( new Literal('"Hello "W"orl"d!"@en-us'), new NamedNode('http://ex.org/b'), new NamedNode('http://ex.org/c'), new DefaultGraph() )); }); describe('with a custom factory', () => { const factory = { defaultGraph: function () { return ['d']; }, namedNode: function (n) { return ['n', n]; }, blankNode: function (b) { return ['b', b]; }, variable: function (v) { return ['v', v]; }, literal: function (l, m) { return ['l', l, m]; }, }; it('should create a DefaultGraph from a falsy value', () => { termFromId(null, factory).should.deep.equal(['d']); }); it('should create a DefaultGraph from the empty string', () => { termFromId('', factory).should.deep.equal(['d']); }); it('should create a NamedNode from an IRI', () => { termFromId('http://example.org/foo#bar', factory).should.deep.equal(['n', 'http://example.org/foo#bar']); }); it('should create a BlankNode from a string that starts with an underscore', () => { termFromId('_:b1', factory).should.deep.equal(['b', 'b1']); }); it('should create a Variable from a string that starts with a question mark', () => { termFromId('?v1', factory).should.deep.equal(['v', 'v1']); }); it('should create a Literal without language or datatype', () => { termFromId('"abc"', factory).should.deep.equal(['l', 'abc', undefined]); }); it('should create a Literal with a language', () => { termFromId('"abc"@en-us', factory).should.deep.equal(['l', 'abc', 'en-us']); }); it('should create a Literal with a datatype', () => { termFromId('"abc"^^https://ex.org/type', factory).should.deep.equal(['l', 'abc', ['n', 'https://ex.org/type']]); }); }); }); describe('termToId', () => { it('should create the empty string a falsy value', () => { termToId(null).should.equal(''); termToId(false).should.equal(''); termToId('').should.equal(''); }); it('should create the empty string from the DefaultGraph', () => { termToId(new DefaultGraph()).should.equal(''); termToId(new DefaultGraph().toJSON()).should.equal(''); }); it('should create an id that starts with a question mark from a Variable', () => { termToId(new Variable('abc')).should.equal('?abc'); termToId(new Variable('abc').toJSON()).should.equal('?abc'); }); it('should create an id that starts with a question mark from a Variable string', () => { termToId('?abc').should.equal('?abc'); }); it('should create an id that starts with a quotation mark from a Literal', () => { termToId(new Literal('"abc"')).should.equal('"abc"'); termToId(new Literal('"abc"').toJSON()).should.equal('"abc"'); }); it('should create an id that starts with a quotation mark from a Literal string', () => { termToId('"abc"').should.equal('"abc"'); }); it('should create an id that starts with a quotation mark and datatype from a Literal with a datatype', () => { termToId(new Literal('"abc"^^http://example.org')).should.equal('"abc"^^http://example.org'); termToId(new Literal('"abc"^^http://example.org').toJSON()).should.equal('"abc"^^http://example.org'); }); it('should create an id that starts with a quotation mark and datatype from a Literal string with a datatype', () => { termToId('"abc"^^http://example.org').should.equal('"abc"^^http://example.org'); }); it('should create an id that starts with a quotation mark and language tag from a Literal with a language', () => { termToId(new Literal('"abc"@en-us')).should.equal('"abc"@en-us'); termToId(new Literal('"abc"@en-us').toJSON()).should.equal('"abc"@en-us'); }); it('should create an id that starts with a quotation mark and language tag from a Literal string with a language', () => { termToId('"abc"@en-us').should.equal('"abc"@en-us'); }); it('should create an id that starts with a quotation mark, datatype and language tag from a Literal with a datatype and language', () => { termToId(new Literal('"abc"^^http://example.org@en-us')).should.equal('"abc"^^http://example.org@en-us'); termToId(new Literal('"abc"^^http://example.org@en-us').toJSON()).should.equal('"abc"^^http://example.org@en-us'); }); it('should create an id that starts with a quotation mark, datatype and language tag from a Literal string with a datatype and language', () => { termToId('"abc"^^http://example.org@en-us').should.equal('"abc"^^http://example.org@en-us'); }); it('should create an id that starts with an underscore from a BlankNode', () => { termToId(new BlankNode('abc')).should.equal('_:abc'); termToId(new BlankNode('abc').toJSON()).should.equal('_:abc'); }); it('should create an id that starts with an underscore from a BlankNode string', () => { termToId('_:abc').should.equal('_:abc'); }); it('should create an IRI from a NamedNode', () => { termToId(new NamedNode('http://example.org/')).should.equal('http://example.org/'); termToId(new NamedNode('http://example.org/').toJSON()).should.equal('http://example.org/'); }); it('should create an IRI from a NamedNode string', () => { termToId('http://example.org/').should.equal('http://example.org/'); }); it('should create an id without graph if default graph is used', () => { termToId(new Quad( new NamedNode('http://ex.org/a'), new NamedNode('http://ex.org/b'), new Literal('"abc"@en-us'), new DefaultGraph() )).should.equal('<>'); }); it('should create an id from a Quad', () => { termToId(new Quad( new NamedNode('http://ex.org/a'), new NamedNode('http://ex.org/b'), new Literal('"abc"@en-us'), new NamedNode('http://ex.org/d') )).should.equal('<>'); }); it('should create an id from a manually created Quad', () => { termToId({ subject: new NamedNode('http://ex.org/a'), predicate: new NamedNode('http://ex.org/b'), object: new Literal('"abc"@en-us'), graph: new NamedNode('http://ex.org/d'), termType: 'Quad', value: '', }).should.equal('<>'); }); it('should create an id with escaped literals from a Quad', () => { termToId(new Quad( new BlankNode('n3-000'), new Variable('var-b'), new Literal('"Hello "W"orl"d!"@en-us'), new NamedNode('http://ex.org/d') )).should.equal('<<_:n3-000 ?var-b "Hello ""W""orl""d!"@en-us http://ex.org/d>>'); }); it('should create an id without graph from a Quad with default graph and Quad as subject', () => { termToId(new Quad( new Quad( new BlankNode('n3-000'), new Variable('var-b'), new Literal('"abc"@en-us'), new NamedNode('http://ex.org/d') ), new NamedNode('http://ex.org/b'), new Literal('"abc"@en-us'), new DefaultGraph() )).should.equal('<<<<_:n3-000 ?var-b "abc"@en-us http://ex.org/d>> http://ex.org/b "abc"@en-us>>'); }); it('should create an id without graph from a Quad with default graph and Quad as object', () => { termToId(new Quad( new Literal('"abc"@en-us'), new NamedNode('http://ex.org/b'), new Quad( new BlankNode('n3-000'), new Variable('var-b'), new Literal('"abc"@en-us'), new NamedNode('http://ex.org/d') ), new DefaultGraph() )).should.equal('<<"abc"@en-us http://ex.org/b <<_:n3-000 ?var-b "abc"@en-us http://ex.org/d>>>>'); }); it('should create an id without graph from a Quad with default graph and Quad as subject and object', () => { termToId(new Quad( new Quad( new BlankNode('n3-000'), new Variable('var-b'), new Literal('"abc"@en-us'), new NamedNode('http://ex.org/d') ), new NamedNode('http://ex.org/b'), new Quad( new BlankNode('n3-000'), new Variable('var-b'), new Literal('"abc"@en-us'), new NamedNode('http://ex.org/d') ), new DefaultGraph() )).should.equal('<<<<_:n3-000 ?var-b "abc"@en-us http://ex.org/d>> http://ex.org/b <<_:n3-000 ?var-b "abc"@en-us http://ex.org/d>>>>'); }); it('should create an id without graph from a Quad with Quad as subject', () => { termToId(new Quad( new Quad( new BlankNode('n3-000'), new Variable('var-b'), new Literal('"abc"@en-us'), new NamedNode('http://ex.org/d') ), new NamedNode('http://ex.org/b'), new Literal('"abc"@en-us'), new NamedNode('http://ex.org/d') )).should.equal('<<<<_:n3-000 ?var-b "abc"@en-us http://ex.org/d>> http://ex.org/b "abc"@en-us http://ex.org/d>>'); }); it('should create an id without graph from a Quad with Quad as object', () => { termToId(new Quad( new Literal('"abc"@en-us'), new NamedNode('http://ex.org/b'), new Quad( new BlankNode('n3-000'), new Variable('var-b'), new Literal('"abc"@en-us'), new NamedNode('http://ex.org/d') ), new NamedNode('http://ex.org/d') )).should.equal('<<"abc"@en-us http://ex.org/b <<_:n3-000 ?var-b "abc"@en-us http://ex.org/d>> http://ex.org/d>>'); }); it('should create an id from a Quad with Quad as subject and object', () => { termToId(new Quad( new Quad( new BlankNode('n3-000'), new Variable('var-b'), new Literal('"abc"@en-us'), new NamedNode('http://ex.org/d') ), new NamedNode('http://ex.org/b'), new Quad( new BlankNode('n3-000'), new Variable('var-b'), new Literal('"abc"@en-us'), new NamedNode('http://ex.org/d') ), new NamedNode('http://ex.org/d') )).should.equal('<<<<_:n3-000 ?var-b "abc"@en-us http://ex.org/d>> http://ex.org/b <<_:n3-000 ?var-b "abc"@en-us http://ex.org/d>> http://ex.org/d>>'); }); it('should escape literals in nested Quads', () => { termToId(new Quad( new Quad( new BlankNode('n3-000'), new Variable('var-b'), new Literal('"Hello "W"orl"d!"@en-us'), new NamedNode('http://ex.org/d') ), new NamedNode('http://ex.org/b'), new Quad( new BlankNode('n3-000'), new Variable('var-b'), new Literal('"Hello "W"orl"d!"@en-us'), new NamedNode('http://ex.org/d') ), new DefaultGraph() )).should.equal('<<<<_:n3-000 ?var-b "Hello ""W""orl""d!"@en-us http://ex.org/d>> http://ex.org/b <<_:n3-000 ?var-b "Hello ""W""orl""d!"@en-us http://ex.org/d>>>>'); }); it('should correctly handle deeply nested quads', () => { termToId(new Quad( new Quad( new Quad( new Quad( new BlankNode('n3-000'), new Variable('var-b'), new Literal('"abc"@en-us'), new NamedNode('http://ex.org/d') ), new Variable('var-b'), new Quad( new BlankNode('n3-000'), new Variable('var-b'), new Literal('"abc"@en-us'), new NamedNode('http://ex.org/d') ), new NamedNode('http://ex.org/d') ), new Variable('var-b'), new Quad( new BlankNode('n3-000'), new Variable('var-b'), new Literal('"abc"@en-us'), new NamedNode('http://ex.org/d') ), new NamedNode('http://ex.org/d') ), new NamedNode('http://ex.org/b'), new Quad( new Quad( new BlankNode('n3-000'), new Variable('var-b'), new Literal('"abc"@en-us'), new NamedNode('http://ex.org/d') ), new Variable('var-b'), new Quad( new BlankNode('n3-000'), new Variable('var-b'), new Literal('"abc"@en-us'), new NamedNode('http://ex.org/d') ), new NamedNode('http://ex.org/d') ), new NamedNode('http://ex.org/d') )).should.equal('<<<<<<<<_:n3-000 ?var-b "abc"@en-us http://ex.org/d>> ?var-b <<_:n3-000 ?var-b "abc"@en-us http://ex.org/d>> http://ex.org/d>> ?var-b <<_:n3-000 ?var-b "abc"@en-us http://ex.org/d>> http://ex.org/d>> http://ex.org/b <<<<_:n3-000 ?var-b "abc"@en-us http://ex.org/d>> ?var-b <<_:n3-000 ?var-b "abc"@en-us http://ex.org/d>> http://ex.org/d>> http://ex.org/d>>'); }); it('should throw on an unknown type', () => { (function () { termToId({ termType: 'unknown' }); }) .should.throw('Unexpected termType: unknown'); }); }); describe('escaping', () => { it('should unescape an escaped string correctly', () => { const id = '"Hello ""World"""@en-us'; unescapeQuotes(id).should.equal('"Hello "World""@en-us'); }); it('should escape an unescaped string correctly', () => { const id = '"Hello "World""@en-us'; escapeQuotes(id).should.equal('"Hello ""World"""@en-us'); }); it('should not change an unescaped string', () => { const id = '"Hello "World""@en-us'; unescapeQuotes(id).should.equal(id); }); it('should not change a string without quotes', () => { const id = '"Hello World"@en-us'; escapeQuotes(id).should.equal(id); }); it('should not change a blank node', () => { const id = '_:b1'; escapeQuotes(id).should.equal(id); }); it('should not change a variable', () => { const id = '?v1'; escapeQuotes(id).should.equal(id); }); it('should not change the empty string', () => { const id = ''; escapeQuotes(id).should.equal(id); }); }); }); N3.js-1.16.3/test/Variable-test.js000066400000000000000000000042661433366257500165420ustar00rootroot00000000000000import { Variable, Term } from '../src/'; describe('Variable', () => { describe('The Variable module', () => { it('should be a function', () => { Variable.should.be.a('function'); }); it('should be a Variable constructor', () => { new Variable().should.be.an.instanceof(Variable); }); it('should be a Term constructor', () => { new Variable().should.be.an.instanceof(Term); }); }); describe('A Variable instance created from a name', () => { let variable; before(() => { variable = new Variable('v1'); }); it('should be a Variable', () => { variable.should.be.an.instanceof(Variable); }); it('should be a Term', () => { variable.should.be.an.instanceof(Term); }); it('should have term type "Variable"', () => { variable.termType.should.equal('Variable'); }); it('should have the name as value', () => { variable.should.have.property('value', 'v1'); }); it('should have "?name" as id value', () => { variable.should.have.property('id', '?v1'); }); it('should equal a Variable instance with the same name', () => { variable.equals(new Variable('v1')).should.be.true; }); it('should equal an object with the same term type and value', () => { variable.equals({ termType: 'Variable', value: 'v1', }).should.be.true; }); it('should not equal a falsy object', () => { variable.equals(null).should.be.false; }); it('should not equal a Variable instance with another name', () => { variable.equals(new Variable('v2')).should.be.false; }); it('should not equal an object with the same term type but a different value', () => { variable.equals({ termType: 'Variable', value: 'v2', }).should.be.false; }); it('should not equal an object with a different term type but the same value', () => { variable.equals({ termType: 'NamedNode', value: 'v1', }).should.be.false; }); it('should provide a JSON representation', () => { variable.toJSON().should.deep.equal({ termType: 'Variable', value: 'v1', }); }); }); }); N3.js-1.16.3/test/test-setup.js000066400000000000000000000001541433366257500161450ustar00rootroot00000000000000const chai = require('chai'); global.expect = chai.expect; chai.should(); chai.use(require('chai-things'));