diff --git a/libraries/tools/kotlin-source-map-loader/build.gradle.kts b/libraries/tools/kotlin-source-map-loader/build.gradle.kts index 17cc5f3c940..bfa70cc7c8f 100644 --- a/libraries/tools/kotlin-source-map-loader/build.gradle.kts +++ b/libraries/tools/kotlin-source-map-loader/build.gradle.kts @@ -46,6 +46,23 @@ tasks { outputs.dir("lib") } + register("yarnTest") { + group = "verification" + + dependsOn("yarn") + setWorkingDir(projectDir) + args = listOf("test") + + inputs.dir( + "test" + ) + inputs.files( + "kotlin-source-map-loader.js", + "package.json", + "yarn.lock" + ) + } + register("cleanYarn") { group = "build" @@ -59,6 +76,10 @@ tasks { named("clean") { dependsOn("cleanYarn") } + + named("check") { + dependsOn("yarnTest") + } } val jar by tasks.creating(Jar::class) { diff --git a/libraries/tools/kotlin-source-map-loader/package.json b/libraries/tools/kotlin-source-map-loader/package.json index ab253816591..2d04695655a 100644 --- a/libraries/tools/kotlin-source-map-loader/package.json +++ b/libraries/tools/kotlin-source-map-loader/package.json @@ -7,11 +7,16 @@ "lib/**/*" ], "scripts": { - "build": "cpx \"kotlin-source-map-loader.js\" lib" + "build": "cpx \"kotlin-source-map-loader.js\" lib", + "test": "mocha -R spec" }, "dependencies": { + "async": "^2.5.0", + "loader-utils": "^1.1.0" }, "devDependencies": { + "mocha": "^5.0.5", + "should": "^13.2.1", "cpx": "^1.5.0" } } diff --git a/libraries/tools/kotlin-source-map-loader/test/fixtures/.gitignore b/libraries/tools/kotlin-source-map-loader/test/fixtures/.gitignore new file mode 100644 index 00000000000..46b6e08a65d --- /dev/null +++ b/libraries/tools/kotlin-source-map-loader/test/fixtures/.gitignore @@ -0,0 +1 @@ +absolute-sourceRoot-source-map.map diff --git a/libraries/tools/kotlin-source-map-loader/test/fixtures/absolute-sourceRoot-source-map.js b/libraries/tools/kotlin-source-map-loader/test/fixtures/absolute-sourceRoot-source-map.js new file mode 100644 index 00000000000..e10ac759502 --- /dev/null +++ b/libraries/tools/kotlin-source-map-loader/test/fixtures/absolute-sourceRoot-source-map.js @@ -0,0 +1,3 @@ +with SourceMap +//#sourceMappingURL=absolute-sourceRoot-source-map.map +// comment \ No newline at end of file diff --git a/libraries/tools/kotlin-source-map-loader/test/fixtures/absolute-sourceRoot-source-map.txt b/libraries/tools/kotlin-source-map-loader/test/fixtures/absolute-sourceRoot-source-map.txt new file mode 100644 index 00000000000..7509bf56927 --- /dev/null +++ b/libraries/tools/kotlin-source-map-loader/test/fixtures/absolute-sourceRoot-source-map.txt @@ -0,0 +1,2 @@ +with SourceMap +// comment \ No newline at end of file diff --git a/libraries/tools/kotlin-source-map-loader/test/fixtures/charset-inline-source-map.js b/libraries/tools/kotlin-source-map-loader/test/fixtures/charset-inline-source-map.js new file mode 100644 index 00000000000..f096e987f4a --- /dev/null +++ b/libraries/tools/kotlin-source-map-loader/test/fixtures/charset-inline-source-map.js @@ -0,0 +1,3 @@ +with SourceMap +// @ sourceMappingURL = data:application/source-map;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnNldC1pbmxpbmUtc291cmNlLW1hcC5qcyIsInNvdXJjZXMiOlsiY2hhcnNldC1pbmxpbmUtc291cmNlLW1hcC50eHQiXSwic291cmNlc0NvbnRlbnQiOlsid2l0aCBTb3VyY2VNYXAiXSwibWFwcGluZ3MiOiJBQUFBIn0= +// comment \ No newline at end of file diff --git a/libraries/tools/kotlin-source-map-loader/test/fixtures/data/external-source-map2.map b/libraries/tools/kotlin-source-map-loader/test/fixtures/data/external-source-map2.map new file mode 100644 index 00000000000..577cee46166 --- /dev/null +++ b/libraries/tools/kotlin-source-map-loader/test/fixtures/data/external-source-map2.map @@ -0,0 +1 @@ +{"version":3,"file":"external-source-map2.js","sources":["../external-source-map2.txt"],"mappings":"AAAA"} \ No newline at end of file diff --git a/libraries/tools/kotlin-source-map-loader/test/fixtures/data/relative-sourceRoot-source-map.txt b/libraries/tools/kotlin-source-map-loader/test/fixtures/data/relative-sourceRoot-source-map.txt new file mode 100644 index 00000000000..7509bf56927 --- /dev/null +++ b/libraries/tools/kotlin-source-map-loader/test/fixtures/data/relative-sourceRoot-source-map.txt @@ -0,0 +1,2 @@ +with SourceMap +// comment \ No newline at end of file diff --git a/libraries/tools/kotlin-source-map-loader/test/fixtures/external-source-map.js b/libraries/tools/kotlin-source-map-loader/test/fixtures/external-source-map.js new file mode 100644 index 00000000000..64dbc5445b3 --- /dev/null +++ b/libraries/tools/kotlin-source-map-loader/test/fixtures/external-source-map.js @@ -0,0 +1,3 @@ +with SourceMap +//#sourceMappingURL=external-source-map.map +// comment \ No newline at end of file diff --git a/libraries/tools/kotlin-source-map-loader/test/fixtures/external-source-map.map b/libraries/tools/kotlin-source-map-loader/test/fixtures/external-source-map.map new file mode 100644 index 00000000000..76163ccdfcc --- /dev/null +++ b/libraries/tools/kotlin-source-map-loader/test/fixtures/external-source-map.map @@ -0,0 +1 @@ +{"version":3,"file":"external-source-map.js","sources":["external-source-map.txt"],"sourcesContent":["with SourceMap"],"mappings":"AAAA"} \ No newline at end of file diff --git a/libraries/tools/kotlin-source-map-loader/test/fixtures/external-source-map2.js b/libraries/tools/kotlin-source-map-loader/test/fixtures/external-source-map2.js new file mode 100644 index 00000000000..844e38ddec5 --- /dev/null +++ b/libraries/tools/kotlin-source-map-loader/test/fixtures/external-source-map2.js @@ -0,0 +1,3 @@ +with SourceMap +//#sourceMappingURL=data/external-source-map2.map +// comment \ No newline at end of file diff --git a/libraries/tools/kotlin-source-map-loader/test/fixtures/external-source-map2.txt b/libraries/tools/kotlin-source-map-loader/test/fixtures/external-source-map2.txt new file mode 100644 index 00000000000..3f2f36da5c6 --- /dev/null +++ b/libraries/tools/kotlin-source-map-loader/test/fixtures/external-source-map2.txt @@ -0,0 +1 @@ +with SourceMap \ No newline at end of file diff --git a/libraries/tools/kotlin-source-map-loader/test/fixtures/inline-source-map.js b/libraries/tools/kotlin-source-map-loader/test/fixtures/inline-source-map.js new file mode 100644 index 00000000000..6fc86a8ccf5 --- /dev/null +++ b/libraries/tools/kotlin-source-map-loader/test/fixtures/inline-source-map.js @@ -0,0 +1,3 @@ +with SourceMap +// @ sourceMappingURL = data:application/source-map;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5saW5lLXNvdXJjZS1tYXAuanMiLCJzb3VyY2VzIjpbImlubGluZS1zb3VyY2UtbWFwLnR4dCJdLCJzb3VyY2VzQ29udGVudCI6WyJ3aXRoIFNvdXJjZU1hcCJdLCJtYXBwaW5ncyI6IkFBQUEifQ== +// comment \ No newline at end of file diff --git a/libraries/tools/kotlin-source-map-loader/test/fixtures/invalid-inline-source-map.js b/libraries/tools/kotlin-source-map-loader/test/fixtures/invalid-inline-source-map.js new file mode 100644 index 00000000000..f9b7d7c7fcc --- /dev/null +++ b/libraries/tools/kotlin-source-map-loader/test/fixtures/invalid-inline-source-map.js @@ -0,0 +1,3 @@ +without SourceMap +// @sourceMappingURL=data:application/source-map;base64,"something invalid" +// comment \ No newline at end of file diff --git a/libraries/tools/kotlin-source-map-loader/test/fixtures/invalid-inline-source-map2.js b/libraries/tools/kotlin-source-map-loader/test/fixtures/invalid-inline-source-map2.js new file mode 100644 index 00000000000..1c667525971 --- /dev/null +++ b/libraries/tools/kotlin-source-map-loader/test/fixtures/invalid-inline-source-map2.js @@ -0,0 +1,3 @@ +without SourceMap +// @sourceMappingURL=data:application/source-map;base64,invalid/base64= +// comment \ No newline at end of file diff --git a/libraries/tools/kotlin-source-map-loader/test/fixtures/invalid-source-map.js b/libraries/tools/kotlin-source-map-loader/test/fixtures/invalid-source-map.js new file mode 100644 index 00000000000..bd240483d89 --- /dev/null +++ b/libraries/tools/kotlin-source-map-loader/test/fixtures/invalid-source-map.js @@ -0,0 +1,3 @@ +with SourceMap +//#sourceMappingURL=invalid-source-map.map +// comment \ No newline at end of file diff --git a/libraries/tools/kotlin-source-map-loader/test/fixtures/invalid-source-map.map b/libraries/tools/kotlin-source-map-loader/test/fixtures/invalid-source-map.map new file mode 100644 index 00000000000..cdcf0176749 --- /dev/null +++ b/libraries/tools/kotlin-source-map-loader/test/fixtures/invalid-source-map.map @@ -0,0 +1 @@ +{"version":3,"file":"invalid-source-map.js","sources":["../invalid-source-map.txt"],"mappings":"AAAA"}"} \ No newline at end of file diff --git a/libraries/tools/kotlin-source-map-loader/test/fixtures/missing-source-map.js b/libraries/tools/kotlin-source-map-loader/test/fixtures/missing-source-map.js new file mode 100644 index 00000000000..f2bf71c0016 --- /dev/null +++ b/libraries/tools/kotlin-source-map-loader/test/fixtures/missing-source-map.js @@ -0,0 +1,3 @@ +with SourceMap +//#sourceMappingURL=missing-source-map.map +// comment \ No newline at end of file diff --git a/libraries/tools/kotlin-source-map-loader/test/fixtures/missing-source-map2.js b/libraries/tools/kotlin-source-map-loader/test/fixtures/missing-source-map2.js new file mode 100644 index 00000000000..62572666963 --- /dev/null +++ b/libraries/tools/kotlin-source-map-loader/test/fixtures/missing-source-map2.js @@ -0,0 +1,3 @@ +with SourceMap +//#sourceMappingURL=missing-source-map2.map +// comment \ No newline at end of file diff --git a/libraries/tools/kotlin-source-map-loader/test/fixtures/missing-source-map2.map b/libraries/tools/kotlin-source-map-loader/test/fixtures/missing-source-map2.map new file mode 100644 index 00000000000..a4d9d96eda6 --- /dev/null +++ b/libraries/tools/kotlin-source-map-loader/test/fixtures/missing-source-map2.map @@ -0,0 +1 @@ +{"version":3,"file":"missing-source-map2.js","sources":["missing-source-map2.txt"],"mappings":"AAAA"} \ No newline at end of file diff --git a/libraries/tools/kotlin-source-map-loader/test/fixtures/multi-source-map.js b/libraries/tools/kotlin-source-map-loader/test/fixtures/multi-source-map.js new file mode 100644 index 00000000000..f8444358a88 --- /dev/null +++ b/libraries/tools/kotlin-source-map-loader/test/fixtures/multi-source-map.js @@ -0,0 +1,4 @@ +with SourceMap +anInvalidDirective = "\n/*# sourceMappingURL=data:application/json;base64,"+btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap))))+" */"; +// @ sourceMappingURL = data:application/source-map;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5saW5lLXNvdXJjZS1tYXAuanMiLCJzb3VyY2VzIjpbImlubGluZS1zb3VyY2UtbWFwLnR4dCJdLCJzb3VyY2VzQ29udGVudCI6WyJ3aXRoIFNvdXJjZU1hcCJdLCJtYXBwaW5ncyI6IkFBQUEifQ== +// comment \ No newline at end of file diff --git a/libraries/tools/kotlin-source-map-loader/test/fixtures/normal-file.js b/libraries/tools/kotlin-source-map-loader/test/fixtures/normal-file.js new file mode 100644 index 00000000000..85c95f070d4 --- /dev/null +++ b/libraries/tools/kotlin-source-map-loader/test/fixtures/normal-file.js @@ -0,0 +1 @@ +without SourceMap \ No newline at end of file diff --git a/libraries/tools/kotlin-source-map-loader/test/fixtures/relative-sourceRoot-source-map.js b/libraries/tools/kotlin-source-map-loader/test/fixtures/relative-sourceRoot-source-map.js new file mode 100644 index 00000000000..2d1807d7aab --- /dev/null +++ b/libraries/tools/kotlin-source-map-loader/test/fixtures/relative-sourceRoot-source-map.js @@ -0,0 +1,3 @@ +with SourceMap +//#sourceMappingURL=relative-sourceRoot-source-map.map +// comment \ No newline at end of file diff --git a/libraries/tools/kotlin-source-map-loader/test/fixtures/relative-sourceRoot-source-map.map b/libraries/tools/kotlin-source-map-loader/test/fixtures/relative-sourceRoot-source-map.map new file mode 100644 index 00000000000..09fb0d25112 --- /dev/null +++ b/libraries/tools/kotlin-source-map-loader/test/fixtures/relative-sourceRoot-source-map.map @@ -0,0 +1 @@ +{"version":3,"file":"relative-sourceRoot-source-map.js","sourceRoot":"../fixtures/data/","sources":["relative-sourceRoot-source-map.txt"],"mappings":"AAAA"} \ No newline at end of file diff --git a/libraries/tools/kotlin-source-map-loader/test/index.test.js b/libraries/tools/kotlin-source-map-loader/test/index.test.js new file mode 100644 index 00000000000..1191e24c18f --- /dev/null +++ b/libraries/tools/kotlin-source-map-loader/test/index.test.js @@ -0,0 +1,307 @@ +var path = require("path"); +var fs = require("fs"); +var should = require("should"); +var loader = require("../"); + +function execLoader(filename, callback) { + var async = false; + var deps = []; + var warns = []; + var context = { + context: path.dirname(filename), + resolve: function(context, request, callback) { + process.nextTick(function() { + var p = path.isAbsolute(request) ? request : path.resolve(context, request); + if(fs.existsSync(p)) + callback(null, p); + else + callback(new Error("File not found")); + }); + }, + addDependency: function(dep) { + deps.push(dep); + }, + emitWarning: function(warn) { + warns.push(warn); + }, + callback: function(err, res, map) { + async = true; + callback(err, res, map, deps, warns); + }, + async: function() { + async = true; + return this.callback; + } + }; + // Remove CRs to make test line ending invariant + var fixtureContent = fs.readFileSync(filename, "utf-8").replace(/\r/g, ''); + var res = loader.call(context, fixtureContent); + if(!async) return callback(null, res, null, deps, warns); +} + +describe("source-map-loader", function() { + const fixturesPath = path.join(__dirname, "fixtures"); + const dataPath = path.join(fixturesPath, "data"); + + it("should leave normal files untouched", function(done) { + execLoader(path.join(fixturesPath, "normal-file.js"), function(err, res, map, deps, warns) { + should.equal(err, null); + warns.should.be.eql([]); + should.equal(res, "without SourceMap"), + should.equal(map, null); + deps.should.be.eql([]); + done(); + }); + }); + + it("should process inlined SourceMaps", function(done) { + execLoader(path.join(fixturesPath, "inline-source-map.js"), function(err, res, map, deps, warns) { + should.equal(err, null); + warns.should.be.eql([]); + should.equal(res, "with SourceMap\n// comment"), + map.should.be.eql({ + "version":3, + "file":"inline-source-map.js", + "sources":[ + "inline-source-map.txt" + ], + "sourcesContent":["with SourceMap"], + "mappings":"AAAA" + }); + deps.should.be.eql([]); + done(); + }); + }); + + it("should process external SourceMaps", function(done) { + execLoader(path.join(fixturesPath, "external-source-map.js"), function(err, res, map, deps, warns) { + should.equal(err, null); + warns.should.be.eql([]); + should.equal(res, "with SourceMap\n// comment"), + map.should.be.eql({ + "version":3, + "file":"external-source-map.js", + "sources":[ + "external-source-map.txt" + ], + "sourcesContent":["with SourceMap"], + "mappings":"AAAA" + }); + deps.should.be.eql([ + path.join(fixturesPath, "external-source-map.map") + ]); + done(); + }); + }); + + it("should process external SourceMaps (external sources)", function(done) { + execLoader(path.join(fixturesPath, "external-source-map2.js"), function(err, res, map, deps, warns) { + should.equal(err, null); + warns.should.be.eql([]); + should.equal(res, "with SourceMap\n// comment"), + map.should.be.eql({ + "version":3, + "file":"external-source-map2.js", + "sources":[ + path.join(fixturesPath, "external-source-map2.txt") + ], + "sourcesContent":["with SourceMap"], + "mappings":"AAAA" + }); + deps.should.be.eql([ + path.join(dataPath, "external-source-map2.map"), + path.join(fixturesPath, "external-source-map2.txt") + ]); + done(); + }); + }); + + it("should use last SourceMap directive", function (done) { + execLoader(path.join(fixturesPath, "multi-source-map.js"), function (err, res, map, deps, warns) { + should.equal(err, null); + warns.should.be.eql([]); + should.equal(res, "with SourceMap\nanInvalidDirective = \"\\n/*# sourceMappingURL=data:application/json;base64,\"+btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap))))+\" */\";\n// comment"), + map.should.be.eql({ + "version": 3, + "file": "inline-source-map.js", + "sources": [ + "inline-source-map.txt" + ], + "sourcesContent": ["with SourceMap"], + "mappings": "AAAA" + }); + deps.should.be.eql([]); + done(); + }); + }); + + it("should skip invalid base64 SourceMap", function (done) { + execLoader(path.join(fixturesPath, "invalid-inline-source-map.js"), function (err, res, map, deps, warns) { + should.equal(err, null); + warns.should.be.eql([]); + should.equal(res, "without SourceMap\n// @sourceMappingURL=data:application/source-map;base64,\"something invalid\"\n// comment"); + should.equal(map, null); + deps.should.be.eql([]); + done(); + }); + }); + it("should warn on invalid base64 SourceMap", function (done) { + execLoader(path.join(fixturesPath, "invalid-inline-source-map2.js"), function (err, res, map, deps, warns) { + should.equal(err, null); + warns.should.matchEach( + new RegExp("Cannot parse inline SourceMap 'invalid\/base64=': SyntaxError: Unexpected token") + ); + should.equal(res, "without SourceMap\n// @sourceMappingURL=data:application/source-map;base64,invalid/base64=\n// comment"); + should.equal(map, null); + deps.should.be.eql([]); + done(); + }); + }); + + it("should warn on invalid SourceMap", function (done) { + execLoader(path.join(fixturesPath, "invalid-source-map.js"), function (err, res, map, deps, warns) { + should.equal(err, null); + warns.should.matchEach( + new RegExp("Cannot parse SourceMap 'invalid-source-map.map': SyntaxError: Unexpected string in JSON at position 102") + ); + should.equal(res, "with SourceMap\n//#sourceMappingURL=invalid-source-map.map\n// comment"); + should.equal(map, null); + deps.should.be.eql([ + path.join(fixturesPath, "invalid-source-map.map") + ]); + done(); + }); + }); + + it("should warn on missing SourceMap", function(done) { + execLoader(path.join(fixturesPath, "missing-source-map.js"), function(err, res, map, deps, warns) { + should.equal(err, null); + warns.should.be.eql([ + "Cannot find SourceMap 'missing-source-map.map': Error: File not found" + ]); + should.equal(res, "with SourceMap\n//#sourceMappingURL=missing-source-map.map\n// comment"), + should.equal(map, null); + deps.should.be.eql([]); + done(); + }); + }); + + it("should warn on missing source file", function(done) { + execLoader(path.join(fixturesPath, "missing-source-map2.js"), function(err, res, map, deps, warns) { + should.equal(err, null); + warns.should.be.eql([ + "Cannot find source file 'missing-source-map2.txt': Error: File not found" + ]); + should.equal(res, "with SourceMap\n// comment"), + map.should.be.eql({ + "version":3, + "file":"missing-source-map2.js", + "sources":[ + "missing-source-map2.txt" + ], + "sourcesContent":[null], + "mappings":"AAAA" + }); + deps.should.be.eql([ + path.join(fixturesPath, "missing-source-map2.map") + ]); + done(); + }); + }); + + it("should process inlined SourceMaps with charset", function(done) { + execLoader(path.join(fixturesPath, "charset-inline-source-map.js"), function(err, res, map, deps, warns) { + should.equal(err, null); + warns.should.be.eql([]); + should.equal(res, "with SourceMap\n// comment"), + map.should.be.eql({ + "version":3, + "file":"charset-inline-source-map.js", + "sources":[ + "charset-inline-source-map.txt" + ], + "sourcesContent":["with SourceMap"], + "mappings":"AAAA" + }); + deps.should.be.eql([]); + done(); + }); + }); + + it("should support absolute sourceRoot paths in sourcemaps", (done) => { + const sourceRoot = path.join(fixturesPath); + const javaScriptFilename = "absolute-sourceRoot-source-map.js"; + const sourceFilename = "absolute-sourceRoot-source-map.txt"; + const rootRelativeSourcePath = path.join(sourceRoot, sourceFilename); + const sourceMapPath = path.join(sourceRoot, "absolute-sourceRoot-source-map.map"); + + // Create the sourcemap file + const rawSourceMap = { + "version": 3, + "file": javaScriptFilename, + "sourceRoot": sourceRoot, + "sources": [ + sourceFilename + ], + "mappings": "AAAA" + }; + fs.writeFileSync(sourceMapPath, JSON.stringify(rawSourceMap)); + + execLoader( + path.join(fixturesPath, javaScriptFilename), + (err, res, map, deps, warns) => { + should.equal(err, null); + warns.should.be.eql([]); + should.equal(res, "with SourceMap\n// comment"), + map.should.be.eql({ + "version": 3, + "file": javaScriptFilename, + "sources": [ + rootRelativeSourcePath + ], + "sourcesContent": [ + "with SourceMap\n// comment" + ], + "mappings": "AAAA" + }); + deps.should.be.eql([ + sourceMapPath, + rootRelativeSourcePath + ]); + done(); + } + ); + }); + + it("should support relative sourceRoot paths in sourcemaps", (done) => { + const javaScriptFilename = "relative-sourceRoot-source-map.js"; + const sourceFilename = "relative-sourceRoot-source-map.txt"; + const rootRelativeSourcePath = path.join(dataPath, sourceFilename); + const sourceMapPath = path.join(fixturesPath, "relative-sourceRoot-source-map.map"); + + execLoader( + path.join(fixturesPath, javaScriptFilename), + (err, res, map, deps, warns) => { + should.equal(err, null); + warns.should.be.eql([]); + should.equal(res, "with SourceMap\n// comment"), + map.should.be.eql({ + "version": 3, + "file": javaScriptFilename, + "sources": [ + rootRelativeSourcePath + ], + "sourcesContent": [ + "with SourceMap\n// comment" + ], + "mappings": "AAAA" + }); + deps.should.be.eql([ + sourceMapPath, + rootRelativeSourcePath + ]); + done(); + } + ); + }); +}); \ No newline at end of file diff --git a/libraries/tools/kotlin-source-map-loader/yarn.lock b/libraries/tools/kotlin-source-map-loader/yarn.lock index 9555de1879b..9cd335ce4ef 100644 --- a/libraries/tools/kotlin-source-map-loader/yarn.lock +++ b/libraries/tools/kotlin-source-map-loader/yarn.lock @@ -80,6 +80,13 @@ async-each@^1.0.0: resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== +async@^2.5.0: + version "2.6.3" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" + integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg== + dependencies: + lodash "^4.17.14" + atob@^2.1.1: version "2.1.2" resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" @@ -111,6 +118,11 @@ base@^0.11.1: mixin-deep "^1.2.0" pascalcase "^0.1.1" +big.js@^5.2.2: + version "5.2.2" + resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" + integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== + binary-extensions@^1.0.0: version "1.13.1" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" @@ -149,6 +161,11 @@ braces@^2.3.1: split-string "^3.0.2" to-regex "^3.0.1" +browser-stdout@1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" + integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== + cache-base@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" @@ -208,6 +225,11 @@ collection-visit@^1.0.0: map-visit "^1.0.0" object-visit "^1.0.0" +commander@2.15.1: + version "2.15.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.15.1.tgz#df46e867d0fc2aec66a34662b406a9ccafff5b0f" + integrity sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag== + component-emitter@^1.2.1: version "1.3.0" resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" @@ -255,6 +277,13 @@ cpx@^1.5.0: shell-quote "^1.6.1" subarg "^1.0.0" +debug@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" + integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== + dependencies: + ms "2.0.0" + debug@^2.2.0, debug@^2.3.3: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" @@ -311,11 +340,26 @@ detect-libc@^1.0.2: resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= +diff@3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" + integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== + duplexer@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" integrity sha1-rOb/gIwc5mtX0ev5eXessCM0z8E= +emojis-list@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" + integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k= + +escape-string-regexp@1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + expand-brackets@^0.1.4: version "0.1.5" resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" @@ -490,6 +534,18 @@ glob2base@^0.0.12: dependencies: find-index "^0.1.1" +glob@7.1.2: + version "7.1.2" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" + integrity sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + glob@^7.0.5, glob@^7.1.3: version "7.1.4" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" @@ -507,6 +563,16 @@ graceful-fs@^4.1.11: resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.2.tgz#6f0952605d0140c1cfdb138ed005775b92d67b02" integrity sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q== +growl@1.10.5: + version "1.10.5" + resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" + integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + has-unicode@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" @@ -543,6 +609,11 @@ has-values@^1.0.0: is-number "^3.0.0" kind-of "^4.0.0" +he@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd" + integrity sha1-k0EP0hsAlzUVH4howvJx80J+I/0= + iconv-lite@^0.4.4: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" @@ -739,6 +810,13 @@ isobject@^3.0.0, isobject@^3.0.1: resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= +json5@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" + integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== + dependencies: + minimist "^1.2.0" + kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: version "3.2.2" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" @@ -763,6 +841,20 @@ kind-of@^6.0.0, kind-of@^6.0.2: resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" integrity sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA== +loader-utils@^1.1.0: + version "1.2.3" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.2.3.tgz#1ff5dc6911c9f0a062531a4c04b609406108c2c7" + integrity sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA== + dependencies: + big.js "^5.2.2" + emojis-list "^2.0.0" + json5 "^1.0.1" + +lodash@^4.17.14: + version "4.17.15" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" + integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== + map-cache@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" @@ -818,7 +910,7 @@ micromatch@^3.1.10: snapdragon "^0.8.1" to-regex "^3.0.2" -minimatch@^3.0.2, minimatch@^3.0.4: +minimatch@3.0.4, minimatch@^3.0.2, minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== @@ -858,13 +950,30 @@ mixin-deep@^1.2.0: for-in "^1.0.2" is-extendable "^1.0.1" -mkdirp@^0.5.0, mkdirp@^0.5.1: +mkdirp@0.5.1, mkdirp@^0.5.0, mkdirp@^0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= dependencies: minimist "0.0.8" +mocha@^5.0.5: + version "5.2.0" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-5.2.0.tgz#6d8ae508f59167f940f2b5b3c4a612ae50c90ae6" + integrity sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ== + dependencies: + browser-stdout "1.3.1" + commander "2.15.1" + debug "3.1.0" + diff "3.5.0" + escape-string-regexp "1.0.5" + glob "7.1.2" + growl "1.10.5" + he "1.1.1" + minimatch "3.0.4" + mkdirp "0.5.1" + supports-color "5.4.0" + ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" @@ -1218,6 +1327,50 @@ shell-quote@^1.6.1: resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.2.tgz#67a7d02c76c9da24f99d20808fcaded0e0e04be2" integrity sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg== +should-equal@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/should-equal/-/should-equal-2.0.0.tgz#6072cf83047360867e68e98b09d71143d04ee0c3" + integrity sha512-ZP36TMrK9euEuWQYBig9W55WPC7uo37qzAEmbjHz4gfyuXrEUgF8cUvQVO+w+d3OMfPvSRQJ22lSm8MQJ43LTA== + dependencies: + should-type "^1.4.0" + +should-format@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/should-format/-/should-format-3.0.3.tgz#9bfc8f74fa39205c53d38c34d717303e277124f1" + integrity sha1-m/yPdPo5IFxT04w01xcwPidxJPE= + dependencies: + should-type "^1.3.0" + should-type-adaptors "^1.0.1" + +should-type-adaptors@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/should-type-adaptors/-/should-type-adaptors-1.1.0.tgz#401e7f33b5533033944d5cd8bf2b65027792e27a" + integrity sha512-JA4hdoLnN+kebEp2Vs8eBe9g7uy0zbRo+RMcU0EsNy+R+k049Ki+N5tT5Jagst2g7EAja+euFuoXFCa8vIklfA== + dependencies: + should-type "^1.3.0" + should-util "^1.0.0" + +should-type@^1.3.0, should-type@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/should-type/-/should-type-1.4.0.tgz#0756d8ce846dfd09843a6947719dfa0d4cff5cf3" + integrity sha1-B1bYzoRt/QmEOmlHcZ36DUz/XPM= + +should-util@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/should-util/-/should-util-1.0.1.tgz#fb0d71338f532a3a149213639e2d32cbea8bcb28" + integrity sha512-oXF8tfxx5cDk8r2kYqlkUJzZpDBqVY/II2WhvU0n9Y3XYvAYRmeaf1PvvIvTgPnv4KJ+ES5M0PyDq5Jp+Ygy2g== + +should@^13.2.1: + version "13.2.3" + resolved "https://registry.yarnpkg.com/should/-/should-13.2.3.tgz#96d8e5acf3e97b49d89b51feaa5ae8d07ef58f10" + integrity sha512-ggLesLtu2xp+ZxI+ysJTmNjh2U0TsC+rQ/pfED9bUZZ4DKefP27D+7YJVVTvKsmjLpIi9jAa7itwDGkDDmt1GQ== + dependencies: + should-equal "^2.0.0" + should-format "^3.0.3" + should-type "^1.4.0" + should-type-adaptors "^1.0.1" + should-util "^1.0.0" + signal-exit@^3.0.0: version "3.0.2" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" @@ -1339,6 +1492,13 @@ subarg@^1.0.0: dependencies: minimist "^1.1.0" +supports-color@5.4.0: + version "5.4.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.4.0.tgz#1c6b337402c2137605efe19f10fec390f6faab54" + integrity sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w== + dependencies: + has-flag "^3.0.0" + tar@^4: version "4.4.13" resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525"