diff options
| author | Joel Kronqvist <joel.h.kronqvist@gmail.com> | 2022-03-05 19:02:27 +0200 | 
|---|---|---|
| committer | Joel Kronqvist <joel.h.kronqvist@gmail.com> | 2022-03-05 19:02:27 +0200 | 
| commit | 5d309ff52cd399a6b71968a6b9a70c8ac0b98981 (patch) | |
| tree | 360f7eb50f956e2367ef38fa1fc6ac7ac5258042 /node_modules/istanbul-lib-report | |
| parent | b500a50f1b97d93c98b36ed9a980f8188d648147 (diff) | |
| download | LYLLRuoka-5d309ff52cd399a6b71968a6b9a70c8ac0b98981.tar.gz LYLLRuoka-5d309ff52cd399a6b71968a6b9a70c8ac0b98981.zip  | |
Added node_modules for the updating to work properly.
Diffstat (limited to 'node_modules/istanbul-lib-report')
| -rw-r--r-- | node_modules/istanbul-lib-report/CHANGELOG.md | 185 | ||||
| -rw-r--r-- | node_modules/istanbul-lib-report/LICENSE | 24 | ||||
| -rw-r--r-- | node_modules/istanbul-lib-report/README.md | 43 | ||||
| -rw-r--r-- | node_modules/istanbul-lib-report/index.js | 40 | ||||
| -rw-r--r-- | node_modules/istanbul-lib-report/lib/context.js | 132 | ||||
| -rw-r--r-- | node_modules/istanbul-lib-report/lib/file-writer.js | 189 | ||||
| -rw-r--r-- | node_modules/istanbul-lib-report/lib/path.js | 169 | ||||
| -rw-r--r-- | node_modules/istanbul-lib-report/lib/report-base.js | 16 | ||||
| -rw-r--r-- | node_modules/istanbul-lib-report/lib/summarizer-factory.js | 284 | ||||
| -rw-r--r-- | node_modules/istanbul-lib-report/lib/tree.js | 137 | ||||
| -rw-r--r-- | node_modules/istanbul-lib-report/lib/watermarks.js | 15 | ||||
| -rw-r--r-- | node_modules/istanbul-lib-report/lib/xml-writer.js | 90 | ||||
| -rw-r--r-- | node_modules/istanbul-lib-report/package.json | 45 | 
13 files changed, 1369 insertions, 0 deletions
diff --git a/node_modules/istanbul-lib-report/CHANGELOG.md b/node_modules/istanbul-lib-report/CHANGELOG.md new file mode 100644 index 0000000..3578bb5 --- /dev/null +++ b/node_modules/istanbul-lib-report/CHANGELOG.md @@ -0,0 +1,185 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [3.0.0](https://github.com/istanbuljs/istanbuljs/compare/istanbul-lib-report@3.0.0-alpha.2...istanbul-lib-report@3.0.0) (2019-12-20) + +**Note:** Version bump only for package istanbul-lib-report + + + + + +# [3.0.0-alpha.2](https://github.com/istanbuljs/istanbuljs/compare/istanbul-lib-report@3.0.0-alpha.1...istanbul-lib-report@3.0.0-alpha.2) (2019-12-07) + +**Note:** Version bump only for package istanbul-lib-report + + + + + +# [3.0.0-alpha.1](https://github.com/istanbuljs/istanbuljs/compare/istanbul-lib-report@3.0.0-alpha.0...istanbul-lib-report@3.0.0-alpha.1) (2019-10-06) + +**Note:** Version bump only for package istanbul-lib-report + + + + + +# [3.0.0-alpha.0](https://github.com/istanbuljs/istanbuljs/compare/istanbul-lib-report@2.0.8...istanbul-lib-report@3.0.0-alpha.0) (2019-06-19) + + +### Bug Fixes + +* **package:** update supports-color to version 7.0.0 ([#420](https://github.com/istanbuljs/istanbuljs/issues/420)) ([631029d](https://github.com/istanbuljs/istanbuljs/commit/631029d)) +* Properly combine directories in nested summarizer ([#380](https://github.com/istanbuljs/istanbuljs/issues/380)) ([50afdbb](https://github.com/istanbuljs/istanbuljs/commit/50afdbb)) + + +### Features + +* Refactor istanbul-lib-report so report can choose summarizer ([#408](https://github.com/istanbuljs/istanbuljs/issues/408)) ([0f328fd](https://github.com/istanbuljs/istanbuljs/commit/0f328fd)) +* Update dependencies, require Node.js 8 ([#401](https://github.com/istanbuljs/istanbuljs/issues/401)) ([bf3a539](https://github.com/istanbuljs/istanbuljs/commit/bf3a539)) + + +### BREAKING CHANGES + +* Existing istanbul-lib-report API's have been changed +* Node.js 8 is now required + + + + + +## [2.0.8](https://github.com/istanbuljs/istanbuljs/compare/istanbul-lib-report@2.0.7...istanbul-lib-report@2.0.8) (2019-04-24) + +**Note:** Version bump only for package istanbul-lib-report + + + + + +## [2.0.7](https://github.com/istanbuljs/istanbuljs/compare/istanbul-lib-report@2.0.6...istanbul-lib-report@2.0.7) (2019-04-09) + +**Note:** Version bump only for package istanbul-lib-report + + + + + +## [2.0.6](https://github.com/istanbuljs/istanbuljs/compare/istanbul-lib-report@2.0.5...istanbul-lib-report@2.0.6) (2019-04-03) + + +### Bug Fixes + +* Avoid corrupting HTML report's arrow png during copy ([#343](https://github.com/istanbuljs/istanbuljs/issues/343)) ([ce664c7](https://github.com/istanbuljs/istanbuljs/commit/ce664c7)) + + + + + +## [2.0.5](https://github.com/istanbuljs/istanbuljs/compare/istanbul-lib-report@2.0.4...istanbul-lib-report@2.0.5) (2019-03-12) + +**Note:** Version bump only for package istanbul-lib-report + + + + + +## [2.0.4](https://github.com/istanbuljs/istanbuljs/compare/istanbul-lib-report@2.0.3...istanbul-lib-report@2.0.4) (2019-01-26) + + +### Bug Fixes + +* nested summarizer error with no files ([#230](https://github.com/istanbuljs/istanbuljs/issues/230)) ([07724bf](https://github.com/istanbuljs/istanbuljs/commit/07724bf)) + + + + + +<a name="2.0.3"></a> +## [2.0.3](https://github.com/istanbuljs/istanbuljs/compare/istanbul-lib-report@2.0.2...istanbul-lib-report@2.0.3) (2018-12-25) + + + + +**Note:** Version bump only for package istanbul-lib-report + +<a name="2.0.2"></a> +## [2.0.2](https://github.com/istanbuljs/istanbuljs/compare/istanbul-lib-report@2.0.1...istanbul-lib-report@2.0.2) (2018-09-06) + + + + +**Note:** Version bump only for package istanbul-lib-report + +<a name="2.0.1"></a> +## [2.0.1](https://github.com/istanbuljs/istanbuljs/compare/istanbul-lib-report@2.0.0...istanbul-lib-report@2.0.1) (2018-07-07) + + + + +**Note:** Version bump only for package istanbul-lib-report + +<a name="2.0.0"></a> +# [2.0.0](https://github.com/istanbuljs/istanbuljs/compare/istanbul-lib-report@1.1.4...istanbul-lib-report@2.0.0) (2018-06-06) + + +### Bug Fixes + +* use null prototype for map objects ([#177](https://github.com/istanbuljs/istanbuljs/issues/177)) ([9a5a30c](https://github.com/istanbuljs/istanbuljs/commit/9a5a30c)) + + +### BREAKING CHANGES + +* a null prototype is now used in several places rather than the default `{}` assignment. + + + + +<a name="1.1.4"></a> +## [1.1.4](https://github.com/istanbuljs/istanbuljs/compare/istanbul-lib-report@1.1.3...istanbul-lib-report@1.1.4) (2018-03-04) + + + + +**Note:** Version bump only for package istanbul-lib-report + +<a name="1.1.3"></a> +## [1.1.3](https://github.com/istanbuljs/istanbuljs/compare/istanbul-lib-report@1.1.2...istanbul-lib-report@1.1.3) (2018-02-13) + + + + +**Note:** Version bump only for package istanbul-lib-report + +<a name="1.1.2"></a> +## [1.1.2](https://github.com/istanbuljs/istanbuljs/compare/istanbul-lib-report@1.1.1...istanbul-lib-report@1.1.2) (2017-10-21) + + +### Bug Fixes + +* remove call to mkdirp.sync() in constructor so when used for ConsoleWriter ([#104](https://github.com/istanbuljs/istanbuljs/issues/104)) ([58eb79d](https://github.com/istanbuljs/istanbuljs/commit/58eb79d)) + + + + +<a name="1.1.1"></a> +## [1.1.1](https://github.com/istanbuljs/istanbuljs/compare/istanbul-lib-report@1.1.0...istanbul-lib-report@1.1.1) (2017-05-27) + + + + +<a name="1.1.0"></a> +# [1.1.0](https://github.com/istanbuljs/istanbul-lib-report/compare/istanbul-lib-report@1.0.0...istanbul-lib-report@1.1.0) (2017-04-29) + + +### Features + +* once 100% line coverage is achieved, missing branch coverage is now shown in text report ([#45](https://github.com/istanbuljs/istanbuljs/issues/45)) ([8a809f8](https://github.com/istanbuljs/istanbul-lib-report/commit/8a809f8)) + + + + +<a name="1.0.0"></a> +# [1.0.0](https://github.com/istanbuljs/istanbul-lib-report/compare/istanbul-lib-report@1.0.0-alpha.3...istanbul-lib-report@1.0.0) (2017-03-27) diff --git a/node_modules/istanbul-lib-report/LICENSE b/node_modules/istanbul-lib-report/LICENSE new file mode 100644 index 0000000..d55d291 --- /dev/null +++ b/node_modules/istanbul-lib-report/LICENSE @@ -0,0 +1,24 @@ +Copyright 2012-2015 Yahoo! Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: +    * Redistributions of source code must retain the above copyright +      notice, this list of conditions and the following disclaimer. +    * Redistributions in binary form must reproduce the above copyright +      notice, this list of conditions and the following disclaimer in the +      documentation and/or other materials provided with the distribution. +    * Neither the name of the Yahoo! Inc. nor the +      names of its contributors may be used to endorse or promote products +      derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL YAHOO! INC. BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/node_modules/istanbul-lib-report/README.md b/node_modules/istanbul-lib-report/README.md new file mode 100644 index 0000000..f7ff56a --- /dev/null +++ b/node_modules/istanbul-lib-report/README.md @@ -0,0 +1,43 @@ +# istanbul-lib-report + +[](https://greenkeeper.io/) +[](https://travis-ci.org/istanbuljs/istanbul-lib-report) + +Core reporting utilities for istanbul. + +## Example usage + +```js +const libReport = require('istanbul-lib-report'); +const reports = require('istanbul-reports'); + +// coverageMap, for instance, obtained from istanbul-lib-coverage +const coverageMap; + +const configWatermarks = { +  statements: [50, 80], +  functions: [50, 80], +  branches: [50, 80], +  lines: [50, 80] +}; + +// create a context for report generation +const context = libReport.createContext({ +  dir: 'report/output/dir', +  // The summarizer to default to (may be overridden by some reports) +  // values can be nested/flat/pkg. Defaults to 'pkg' +  defaultSummarizer: 'nested', +  watermarks: configWatermarks, +  coverageMap, +}) + +// create an instance of the relevant report class, passing the +// report name e.g. json/html/html-spa/text +const report = reports.create('json', { +  skipEmpty: configSkipEmpty, +  skipFull: configSkipFull +}) + +// call execute to synchronously create and write the report to disk +report.execute(context) +``` diff --git a/node_modules/istanbul-lib-report/index.js b/node_modules/istanbul-lib-report/index.js new file mode 100644 index 0000000..af1a1c8 --- /dev/null +++ b/node_modules/istanbul-lib-report/index.js @@ -0,0 +1,40 @@ +/* + Copyright 2012-2015, Yahoo Inc. + Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. + */ +'use strict'; + +/** + * @module Exports + */ + +const Context = require('./lib/context'); +const watermarks = require('./lib/watermarks'); +const ReportBase = require('./lib/report-base'); + +module.exports = { +    /** +     * returns a reporting context for the supplied options +     * @param {Object} [opts=null] opts +     * @returns {Context} +     */ +    createContext(opts) { +        return new Context(opts); +    }, + +    /** +     * returns the default watermarks that would be used when not +     * overridden +     * @returns {Object} an object with `statements`, `functions`, `branches`, +     *  and `line` keys. Each value is a 2 element array that has the low and +     *  high watermark as percentages. +     */ +    getDefaultWatermarks() { +        return watermarks.getDefault(); +    }, + +    /** +     * Base class for all reports +     */ +    ReportBase +}; diff --git a/node_modules/istanbul-lib-report/lib/context.js b/node_modules/istanbul-lib-report/lib/context.js new file mode 100644 index 0000000..fbb30bc --- /dev/null +++ b/node_modules/istanbul-lib-report/lib/context.js @@ -0,0 +1,132 @@ +'use strict'; +/* + Copyright 2012-2015, Yahoo Inc. + Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. + */ +const fs = require('fs'); +const FileWriter = require('./file-writer'); +const XMLWriter = require('./xml-writer'); +const tree = require('./tree'); +const watermarks = require('./watermarks'); +const SummarizerFactory = require('./summarizer-factory'); + +function defaultSourceLookup(path) { +    try { +        return fs.readFileSync(path, 'utf8'); +    } catch (ex) { +        throw new Error(`Unable to lookup source: ${path} (${ex.message})`); +    } +} + +function normalizeWatermarks(specified = {}) { +    Object.entries(watermarks.getDefault()).forEach(([k, value]) => { +        const specValue = specified[k]; +        if (!Array.isArray(specValue) || specValue.length !== 2) { +            specified[k] = value; +        } +    }); + +    return specified; +} + +/** + * A reporting context that is passed to report implementations + * @param {Object} [opts=null] opts options + * @param {String} [opts.dir='coverage'] opts.dir the reporting directory + * @param {Object} [opts.watermarks=null] opts.watermarks watermarks for + *  statements, lines, branches and functions + * @param {Function} [opts.sourceFinder=fsLookup] opts.sourceFinder a + *  function that returns source code given a file path. Defaults to + *  filesystem lookups based on path. + * @constructor + */ +class Context { +    constructor(opts) { +        this.dir = opts.dir || 'coverage'; +        this.watermarks = normalizeWatermarks(opts.watermarks); +        this.sourceFinder = opts.sourceFinder || defaultSourceLookup; +        this._summarizerFactory = new SummarizerFactory( +            opts.coverageMap, +            opts.defaultSummarizer +        ); +        this.data = {}; +    } + +    /** +     * returns a FileWriter implementation for reporting use. Also available +     * as the `writer` property on the context. +     * @returns {Writer} +     */ +    getWriter() { +        return this.writer; +    } + +    /** +     * returns the source code for the specified file path or throws if +     * the source could not be found. +     * @param {String} filePath the file path as found in a file coverage object +     * @returns {String} the source code +     */ +    getSource(filePath) { +        return this.sourceFinder(filePath); +    } + +    /** +     * returns the coverage class given a coverage +     * types and a percentage value. +     * @param {String} type - the coverage type, one of `statements`, `functions`, +     *  `branches`, or `lines` +     * @param {Number} value - the percentage value +     * @returns {String} one of `high`, `medium` or `low` +     */ +    classForPercent(type, value) { +        const watermarks = this.watermarks[type]; +        if (!watermarks) { +            return 'unknown'; +        } +        if (value < watermarks[0]) { +            return 'low'; +        } +        if (value >= watermarks[1]) { +            return 'high'; +        } +        return 'medium'; +    } + +    /** +     * returns an XML writer for the supplied content writer +     * @param {ContentWriter} contentWriter the content writer to which the returned XML writer +     *  writes data +     * @returns {XMLWriter} +     */ +    getXMLWriter(contentWriter) { +        return new XMLWriter(contentWriter); +    } + +    /** +     * returns a full visitor given a partial one. +     * @param {Object} partialVisitor a partial visitor only having the functions of +     *  interest to the caller. These functions are called with a scope that is the +     *  supplied object. +     * @returns {Visitor} +     */ +    getVisitor(partialVisitor) { +        return new tree.Visitor(partialVisitor); +    } + +    getTree(name = 'defaultSummarizer') { +        return this._summarizerFactory[name]; +    } +} + +Object.defineProperty(Context.prototype, 'writer', { +    enumerable: true, +    get() { +        if (!this.data.writer) { +            this.data.writer = new FileWriter(this.dir); +        } +        return this.data.writer; +    } +}); + +module.exports = Context; diff --git a/node_modules/istanbul-lib-report/lib/file-writer.js b/node_modules/istanbul-lib-report/lib/file-writer.js new file mode 100644 index 0000000..de1154b --- /dev/null +++ b/node_modules/istanbul-lib-report/lib/file-writer.js @@ -0,0 +1,189 @@ +'use strict'; +/* + Copyright 2012-2015, Yahoo Inc. + Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. + */ +const path = require('path'); +const fs = require('fs'); +const mkdirp = require('make-dir'); +const supportsColor = require('supports-color'); + +/** + * Base class for writing content + * @class ContentWriter + * @constructor + */ +class ContentWriter { +    /** +     * returns the colorized version of a string. Typically, +     * content writers that write to files will return the +     * same string and ones writing to a tty will wrap it in +     * appropriate escape sequences. +     * @param {String} str the string to colorize +     * @param {String} clazz one of `high`, `medium` or `low` +     * @returns {String} the colorized form of the string +     */ +    colorize(str /*, clazz*/) { +        return str; +    } + +    /** +     * writes a string appended with a newline to the destination +     * @param {String} str the string to write +     */ +    println(str) { +        this.write(`${str}\n`); +    } + +    /** +     * closes this content writer. Should be called after all writes are complete. +     */ +    close() {} +} + +/** + * a content writer that writes to a file + * @param {Number} fd - the file descriptor + * @extends ContentWriter + * @constructor + */ +class FileContentWriter extends ContentWriter { +    constructor(fd) { +        super(); + +        this.fd = fd; +    } + +    write(str) { +        fs.writeSync(this.fd, str); +    } + +    close() { +        fs.closeSync(this.fd); +    } +} + +// allow stdout to be captured for tests. +let capture = false; +let output = ''; + +/** + * a content writer that writes to the console + * @extends ContentWriter + * @constructor + */ +class ConsoleWriter extends ContentWriter { +    write(str) { +        if (capture) { +            output += str; +        } else { +            process.stdout.write(str); +        } +    } + +    colorize(str, clazz) { +        const colors = { +            low: '31;1', +            medium: '33;1', +            high: '32;1' +        }; + +        /* istanbul ignore next: different modes for CI and local */ +        if (supportsColor.stdout && colors[clazz]) { +            return `\u001b[${colors[clazz]}m${str}\u001b[0m`; +        } +        return str; +    } +} + +/** + * utility for writing files under a specific directory + * @class FileWriter + * @param {String} baseDir the base directory under which files should be written + * @constructor + */ +class FileWriter { +    constructor(baseDir) { +        if (!baseDir) { +            throw new Error('baseDir must be specified'); +        } +        this.baseDir = baseDir; +    } + +    /** +     * static helpers for capturing stdout report output; +     * super useful for tests! +     */ +    static startCapture() { +        capture = true; +    } + +    static stopCapture() { +        capture = false; +    } + +    static getOutput() { +        return output; +    } + +    static resetOutput() { +        output = ''; +    } + +    /** +     * returns a FileWriter that is rooted at the supplied subdirectory +     * @param {String} subdir the subdirectory under which to root the +     *  returned FileWriter +     * @returns {FileWriter} +     */ +    writerForDir(subdir) { +        if (path.isAbsolute(subdir)) { +            throw new Error( +                `Cannot create subdir writer for absolute path: ${subdir}` +            ); +        } +        return new FileWriter(`${this.baseDir}/${subdir}`); +    } + +    /** +     * copies a file from a source directory to a destination name +     * @param {String} source path to source file +     * @param {String} dest relative path to destination file +     * @param {String} [header=undefined] optional text to prepend to destination +     *  (e.g., an "this file is autogenerated" comment, copyright notice, etc.) +     */ +    copyFile(source, dest, header) { +        if (path.isAbsolute(dest)) { +            throw new Error(`Cannot write to absolute path: ${dest}`); +        } +        dest = path.resolve(this.baseDir, dest); +        mkdirp.sync(path.dirname(dest)); +        let contents; +        if (header) { +            contents = header + fs.readFileSync(source, 'utf8'); +        } else { +            contents = fs.readFileSync(source); +        } +        fs.writeFileSync(dest, contents); +    } + +    /** +     * returns a content writer for writing content to the supplied file. +     * @param {String|null} file the relative path to the file or the special +     *  values `"-"` or `null` for writing to the console +     * @returns {ContentWriter} +     */ +    writeFile(file) { +        if (file === null || file === '-') { +            return new ConsoleWriter(); +        } +        if (path.isAbsolute(file)) { +            throw new Error(`Cannot write to absolute path: ${file}`); +        } +        file = path.resolve(this.baseDir, file); +        mkdirp.sync(path.dirname(file)); +        return new FileContentWriter(fs.openSync(file, 'w')); +    } +} + +module.exports = FileWriter; diff --git a/node_modules/istanbul-lib-report/lib/path.js b/node_modules/istanbul-lib-report/lib/path.js new file mode 100644 index 0000000..c928b17 --- /dev/null +++ b/node_modules/istanbul-lib-report/lib/path.js @@ -0,0 +1,169 @@ +/* + Copyright 2012-2015, Yahoo Inc. + Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. + */ +'use strict'; + +const path = require('path'); +let parsePath = path.parse; +let SEP = path.sep; +const origParser = parsePath; +const origSep = SEP; + +function makeRelativeNormalizedPath(str, sep) { +    const parsed = parsePath(str); +    let root = parsed.root; +    let dir; +    let file = parsed.base; +    let quoted; +    let pos; + +    // handle a weird windows case separately +    if (sep === '\\') { +        pos = root.indexOf(':\\'); +        if (pos >= 0) { +            root = root.substring(0, pos + 2); +        } +    } +    dir = parsed.dir.substring(root.length); + +    if (str === '') { +        return []; +    } + +    if (sep !== '/') { +        quoted = new RegExp(sep.replace(/\W/g, '\\$&'), 'g'); +        dir = dir.replace(quoted, '/'); +        file = file.replace(quoted, '/'); // excessively paranoid? +    } + +    if (dir !== '') { +        dir = `${dir}/${file}`; +    } else { +        dir = file; +    } +    if (dir.substring(0, 1) === '/') { +        dir = dir.substring(1); +    } +    dir = dir.split(/\/+/); +    return dir; +} + +class Path { +    constructor(strOrArray) { +        if (Array.isArray(strOrArray)) { +            this.v = strOrArray; +        } else if (typeof strOrArray === 'string') { +            this.v = makeRelativeNormalizedPath(strOrArray, SEP); +        } else { +            throw new Error( +                `Invalid Path argument must be string or array:${strOrArray}` +            ); +        } +    } + +    toString() { +        return this.v.join('/'); +    } + +    hasParent() { +        return this.v.length > 0; +    } + +    parent() { +        if (!this.hasParent()) { +            throw new Error('Unable to get parent for 0 elem path'); +        } +        const p = this.v.slice(); +        p.pop(); +        return new Path(p); +    } + +    elements() { +        return this.v.slice(); +    } + +    name() { +        return this.v.slice(-1)[0]; +    } + +    contains(other) { +        let i; +        if (other.length > this.length) { +            return false; +        } +        for (i = 0; i < other.length; i += 1) { +            if (this.v[i] !== other.v[i]) { +                return false; +            } +        } +        return true; +    } + +    ancestorOf(other) { +        return other.contains(this) && other.length !== this.length; +    } + +    descendantOf(other) { +        return this.contains(other) && other.length !== this.length; +    } + +    commonPrefixPath(other) { +        const len = this.length > other.length ? other.length : this.length; +        let i; +        const ret = []; + +        for (i = 0; i < len; i += 1) { +            if (this.v[i] === other.v[i]) { +                ret.push(this.v[i]); +            } else { +                break; +            } +        } +        return new Path(ret); +    } + +    static compare(a, b) { +        const al = a.length; +        const bl = b.length; + +        if (al < bl) { +            return -1; +        } + +        if (al > bl) { +            return 1; +        } + +        const astr = a.toString(); +        const bstr = b.toString(); +        return astr < bstr ? -1 : astr > bstr ? 1 : 0; +    } +} + +['push', 'pop', 'shift', 'unshift', 'splice'].forEach(fn => { +    Object.defineProperty(Path.prototype, fn, { +        value(...args) { +            return this.v[fn](...args); +        } +    }); +}); + +Object.defineProperty(Path.prototype, 'length', { +    enumerable: true, +    get() { +        return this.v.length; +    } +}); + +module.exports = Path; +Path.tester = { +    setParserAndSep(p, sep) { +        parsePath = p; +        SEP = sep; +    }, +    reset() { +        parsePath = origParser; +        SEP = origSep; +    } +}; diff --git a/node_modules/istanbul-lib-report/lib/report-base.js b/node_modules/istanbul-lib-report/lib/report-base.js new file mode 100644 index 0000000..96de750 --- /dev/null +++ b/node_modules/istanbul-lib-report/lib/report-base.js @@ -0,0 +1,16 @@ +'use strict'; + +// TODO: switch to class private field when targetting node.js 12 +const _summarizer = Symbol('ReportBase.#summarizer'); + +class ReportBase { +    constructor(opts = {}) { +        this[_summarizer] = opts.summarizer; +    } + +    execute(context) { +        context.getTree(this[_summarizer]).visit(this, context); +    } +} + +module.exports = ReportBase; diff --git a/node_modules/istanbul-lib-report/lib/summarizer-factory.js b/node_modules/istanbul-lib-report/lib/summarizer-factory.js new file mode 100644 index 0000000..5e8acd9 --- /dev/null +++ b/node_modules/istanbul-lib-report/lib/summarizer-factory.js @@ -0,0 +1,284 @@ +/* + Copyright 2012-2015, Yahoo Inc. + Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. + */ +'use strict'; + +const coverage = require('istanbul-lib-coverage'); +const Path = require('./path'); +const { BaseNode, BaseTree } = require('./tree'); + +class ReportNode extends BaseNode { +    constructor(path, fileCoverage) { +        super(); + +        this.path = path; +        this.parent = null; +        this.fileCoverage = fileCoverage; +        this.children = []; +    } + +    static createRoot(children) { +        const root = new ReportNode(new Path([])); + +        children.forEach(child => { +            root.addChild(child); +        }); + +        return root; +    } + +    addChild(child) { +        child.parent = this; +        this.children.push(child); +    } + +    asRelative(p) { +        if (p.substring(0, 1) === '/') { +            return p.substring(1); +        } +        return p; +    } + +    getQualifiedName() { +        return this.asRelative(this.path.toString()); +    } + +    getRelativeName() { +        const parent = this.getParent(); +        const myPath = this.path; +        let relPath; +        let i; +        const parentPath = parent ? parent.path : new Path([]); +        if (parentPath.ancestorOf(myPath)) { +            relPath = new Path(myPath.elements()); +            for (i = 0; i < parentPath.length; i += 1) { +                relPath.shift(); +            } +            return this.asRelative(relPath.toString()); +        } +        return this.asRelative(this.path.toString()); +    } + +    getParent() { +        return this.parent; +    } + +    getChildren() { +        return this.children; +    } + +    isSummary() { +        return !this.fileCoverage; +    } + +    getFileCoverage() { +        return this.fileCoverage; +    } + +    getCoverageSummary(filesOnly) { +        const cacheProp = `c_${filesOnly ? 'files' : 'full'}`; +        let summary; + +        if (Object.prototype.hasOwnProperty.call(this, cacheProp)) { +            return this[cacheProp]; +        } + +        if (!this.isSummary()) { +            summary = this.getFileCoverage().toSummary(); +        } else { +            let count = 0; +            summary = coverage.createCoverageSummary(); +            this.getChildren().forEach(child => { +                if (filesOnly && child.isSummary()) { +                    return; +                } +                count += 1; +                summary.merge(child.getCoverageSummary(filesOnly)); +            }); +            if (count === 0 && filesOnly) { +                summary = null; +            } +        } +        this[cacheProp] = summary; +        return summary; +    } +} + +class ReportTree extends BaseTree { +    constructor(root, childPrefix) { +        super(root); + +        const maybePrefix = node => { +            if (childPrefix && !node.isRoot()) { +                node.path.unshift(childPrefix); +            } +        }; +        this.visit({ +            onDetail: maybePrefix, +            onSummary(node) { +                maybePrefix(node); +                node.children.sort((a, b) => { +                    const astr = a.path.toString(); +                    const bstr = b.path.toString(); +                    return astr < bstr +                        ? -1 +                        : astr > bstr +                        ? 1 +                        : /* istanbul ignore next */ 0; +                }); +            } +        }); +    } +} + +function findCommonParent(paths) { +    return paths.reduce( +        (common, path) => common.commonPrefixPath(path), +        paths[0] || new Path([]) +    ); +} + +function findOrCreateParent(parentPath, nodeMap, created = () => {}) { +    let parent = nodeMap[parentPath.toString()]; + +    if (!parent) { +        parent = new ReportNode(parentPath); +        nodeMap[parentPath.toString()] = parent; +        created(parentPath, parent); +    } + +    return parent; +} + +function toDirParents(list) { +    const nodeMap = Object.create(null); +    list.forEach(o => { +        const parent = findOrCreateParent(o.path.parent(), nodeMap); +        parent.addChild(new ReportNode(o.path, o.fileCoverage)); +    }); + +    return Object.values(nodeMap); +} + +function addAllPaths(topPaths, nodeMap, path, node) { +    const parent = findOrCreateParent( +        path.parent(), +        nodeMap, +        (parentPath, parent) => { +            if (parentPath.hasParent()) { +                addAllPaths(topPaths, nodeMap, parentPath, parent); +            } else { +                topPaths.push(parent); +            } +        } +    ); + +    parent.addChild(node); +} + +function foldIntoOneDir(node, parent) { +    const { children } = node; +    if (children.length === 1 && !children[0].fileCoverage) { +        children[0].parent = parent; +        return foldIntoOneDir(children[0], parent); +    } +    node.children = children.map(child => foldIntoOneDir(child, node)); +    return node; +} + +function pkgSummaryPrefix(dirParents, commonParent) { +    if (!dirParents.some(dp => dp.path.length === 0)) { +        return; +    } + +    if (commonParent.length === 0) { +        return 'root'; +    } + +    return commonParent.name(); +} + +class SummarizerFactory { +    constructor(coverageMap, defaultSummarizer = 'pkg') { +        this._coverageMap = coverageMap; +        this._defaultSummarizer = defaultSummarizer; +        this._initialList = coverageMap.files().map(filePath => ({ +            filePath, +            path: new Path(filePath), +            fileCoverage: coverageMap.fileCoverageFor(filePath) +        })); +        this._commonParent = findCommonParent( +            this._initialList.map(o => o.path.parent()) +        ); +        if (this._commonParent.length > 0) { +            this._initialList.forEach(o => { +                o.path.splice(0, this._commonParent.length); +            }); +        } +    } + +    get defaultSummarizer() { +        return this[this._defaultSummarizer]; +    } + +    get flat() { +        if (!this._flat) { +            this._flat = new ReportTree( +                ReportNode.createRoot( +                    this._initialList.map( +                        node => new ReportNode(node.path, node.fileCoverage) +                    ) +                ) +            ); +        } + +        return this._flat; +    } + +    _createPkg() { +        const dirParents = toDirParents(this._initialList); +        if (dirParents.length === 1) { +            return new ReportTree(dirParents[0]); +        } + +        return new ReportTree( +            ReportNode.createRoot(dirParents), +            pkgSummaryPrefix(dirParents, this._commonParent) +        ); +    } + +    get pkg() { +        if (!this._pkg) { +            this._pkg = this._createPkg(); +        } + +        return this._pkg; +    } + +    _createNested() { +        const nodeMap = Object.create(null); +        const topPaths = []; +        this._initialList.forEach(o => { +            const node = new ReportNode(o.path, o.fileCoverage); +            addAllPaths(topPaths, nodeMap, o.path, node); +        }); + +        const topNodes = topPaths.map(node => foldIntoOneDir(node)); +        if (topNodes.length === 1) { +            return new ReportTree(topNodes[0]); +        } + +        return new ReportTree(ReportNode.createRoot(topNodes)); +    } + +    get nested() { +        if (!this._nested) { +            this._nested = this._createNested(); +        } + +        return this._nested; +    } +} + +module.exports = SummarizerFactory; diff --git a/node_modules/istanbul-lib-report/lib/tree.js b/node_modules/istanbul-lib-report/lib/tree.js new file mode 100644 index 0000000..7c18204 --- /dev/null +++ b/node_modules/istanbul-lib-report/lib/tree.js @@ -0,0 +1,137 @@ +/* + Copyright 2012-2015, Yahoo Inc. + Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. + */ +'use strict'; + +/** + * An object with methods that are called during the traversal of the coverage tree. + * A visitor has the following methods that are called during tree traversal. + * + *   * `onStart(root, state)` - called before traversal begins + *   * `onSummary(node, state)` - called for every summary node + *   * `onDetail(node, state)` - called for every detail node + *   * `onSummaryEnd(node, state)` - called after all children have been visited for + *      a summary node. + *   * `onEnd(root, state)` - called after traversal ends + * + * @param delegate - a partial visitor that only implements the methods of interest + *  The visitor object supplies the missing methods as noops. For example, reports + *  that only need the final coverage summary need implement `onStart` and nothing + *  else. Reports that use only detailed coverage information need implement `onDetail` + *  and nothing else. + * @constructor + */ +class Visitor { +    constructor(delegate) { +        this.delegate = delegate; +    } +} + +['Start', 'End', 'Summary', 'SummaryEnd', 'Detail'] +    .map(k => `on${k}`) +    .forEach(fn => { +        Object.defineProperty(Visitor.prototype, fn, { +            writable: true, +            value(node, state) { +                if (typeof this.delegate[fn] === 'function') { +                    this.delegate[fn](node, state); +                } +            } +        }); +    }); + +class CompositeVisitor extends Visitor { +    constructor(visitors) { +        super(); + +        if (!Array.isArray(visitors)) { +            visitors = [visitors]; +        } +        this.visitors = visitors.map(v => { +            if (v instanceof Visitor) { +                return v; +            } +            return new Visitor(v); +        }); +    } +} + +['Start', 'Summary', 'SummaryEnd', 'Detail', 'End'] +    .map(k => `on${k}`) +    .forEach(fn => { +        Object.defineProperty(CompositeVisitor.prototype, fn, { +            value(node, state) { +                this.visitors.forEach(v => { +                    v[fn](node, state); +                }); +            } +        }); +    }); + +class BaseNode { +    isRoot() { +        return !this.getParent(); +    } + +    /** +     * visit all nodes depth-first from this node down. Note that `onStart` +     * and `onEnd` are never called on the visitor even if the current +     * node is the root of the tree. +     * @param visitor a full visitor that is called during tree traversal +     * @param state optional state that is passed around +     */ +    visit(visitor, state) { +        if (this.isSummary()) { +            visitor.onSummary(this, state); +        } else { +            visitor.onDetail(this, state); +        } + +        this.getChildren().forEach(child => { +            child.visit(visitor, state); +        }); + +        if (this.isSummary()) { +            visitor.onSummaryEnd(this, state); +        } +    } +} + +/** + * abstract base class for a coverage tree. + * @constructor + */ +class BaseTree { +    constructor(root) { +        this.root = root; +    } + +    /** +     * returns the root node of the tree +     */ +    getRoot() { +        return this.root; +    } + +    /** +     * visits the tree depth-first with the supplied partial visitor +     * @param visitor - a potentially partial visitor +     * @param state - the state to be passed around during tree traversal +     */ +    visit(visitor, state) { +        if (!(visitor instanceof Visitor)) { +            visitor = new Visitor(visitor); +        } +        visitor.onStart(this.getRoot(), state); +        this.getRoot().visit(visitor, state); +        visitor.onEnd(this.getRoot(), state); +    } +} + +module.exports = { +    BaseTree, +    BaseNode, +    Visitor, +    CompositeVisitor +}; diff --git a/node_modules/istanbul-lib-report/lib/watermarks.js b/node_modules/istanbul-lib-report/lib/watermarks.js new file mode 100644 index 0000000..fb76082 --- /dev/null +++ b/node_modules/istanbul-lib-report/lib/watermarks.js @@ -0,0 +1,15 @@ +'use strict'; +/* + Copyright 2012-2015, Yahoo Inc. + Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. + */ +module.exports = { +    getDefault() { +        return { +            statements: [50, 80], +            functions: [50, 80], +            branches: [50, 80], +            lines: [50, 80] +        }; +    } +}; diff --git a/node_modules/istanbul-lib-report/lib/xml-writer.js b/node_modules/istanbul-lib-report/lib/xml-writer.js new file mode 100644 index 0000000..a32550e --- /dev/null +++ b/node_modules/istanbul-lib-report/lib/xml-writer.js @@ -0,0 +1,90 @@ +'use strict'; +/* + Copyright 2012-2015, Yahoo Inc. + Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. + */ +const INDENT = '  '; + +function attrString(attrs) { +    return Object.entries(attrs || {}) +        .map(([k, v]) => ` ${k}="${v}"`) +        .join(''); +} + +/** + * a utility class to produce well-formed, indented XML + * @param {ContentWriter} contentWriter the content writer that this utility wraps + * @constructor + */ +class XMLWriter { +    constructor(contentWriter) { +        this.cw = contentWriter; +        this.stack = []; +    } + +    indent(str) { +        return this.stack.map(() => INDENT).join('') + str; +    } + +    /** +     * writes the opening XML tag with the supplied attributes +     * @param {String} name tag name +     * @param {Object} [attrs=null] attrs attributes for the tag +     */ +    openTag(name, attrs) { +        const str = this.indent(`<${name + attrString(attrs)}>`); +        this.cw.println(str); +        this.stack.push(name); +    } + +    /** +     * closes an open XML tag. +     * @param {String} name - tag name to close. This must match the writer's +     *  notion of the tag that is currently open. +     */ +    closeTag(name) { +        if (this.stack.length === 0) { +            throw new Error(`Attempt to close tag ${name} when not opened`); +        } +        const stashed = this.stack.pop(); +        const str = `</${name}>`; + +        if (stashed !== name) { +            throw new Error( +                `Attempt to close tag ${name} when ${stashed} was the one open` +            ); +        } +        this.cw.println(this.indent(str)); +    } + +    /** +     * writes a tag and its value opening and closing it at the same time +     * @param {String} name tag name +     * @param {Object} [attrs=null] attrs tag attributes +     * @param {String} [content=null] content optional tag content +     */ +    inlineTag(name, attrs, content) { +        let str = '<' + name + attrString(attrs); +        if (content) { +            str += `>${content}</${name}>`; +        } else { +            str += '/>'; +        } +        str = this.indent(str); +        this.cw.println(str); +    } + +    /** +     * closes all open tags and ends the document +     */ +    closeAll() { +        this.stack +            .slice() +            .reverse() +            .forEach(name => { +                this.closeTag(name); +            }); +    } +} + +module.exports = XMLWriter; diff --git a/node_modules/istanbul-lib-report/package.json b/node_modules/istanbul-lib-report/package.json new file mode 100644 index 0000000..95bab1c --- /dev/null +++ b/node_modules/istanbul-lib-report/package.json @@ -0,0 +1,45 @@ +{ +  "name": "istanbul-lib-report", +  "version": "3.0.0", +  "description": "Base reporting library for istanbul", +  "author": "Krishnan Anantheswaran <kananthmail-github@yahoo.com>", +  "main": "index.js", +  "files": [ +    "lib", +    "index.js" +  ], +  "scripts": { +    "test": "nyc --nycrc-path=../../monorepo-per-package-full.js mocha" +  }, +  "dependencies": { +    "istanbul-lib-coverage": "^3.0.0", +    "make-dir": "^3.0.0", +    "supports-color": "^7.1.0" +  }, +  "devDependencies": { +    "chai": "^4.2.0", +    "mocha": "^6.2.2", +    "nyc": "^15.0.0-beta.2", +    "rimraf": "^3.0.0" +  }, +  "license": "BSD-3-Clause", +  "bugs": { +    "url": "https://github.com/istanbuljs/istanbuljs/issues" +  }, +  "homepage": "https://istanbul.js.org/", +  "repository": { +    "type": "git", +    "url": "git+ssh://git@github.com/istanbuljs/istanbuljs.git", +    "directory": "packages/istanbul-lib-report" +  }, +  "keywords": [ +    "istanbul", +    "report", +    "api", +    "lib" +  ], +  "engines": { +    "node": ">=8" +  }, +  "gitHead": "5319df684b508ff6fb19fe8b9a6147a3c5924e4b" +}  | 
