123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819 |
- // Copyright 2014 Simon Lydell
- // X11 (“MIT”) Licensed. (See LICENSE.)
- var test = require("tape")
- var asyncify = require("simple-asyncify")
- var common = require("./common")
- var u = common.u
- var read = common.read
- var Throws = common.Throws
- var identity = common.identity
- var sourceMapResolve = require("../")
- // Polyfills.
- require("setimmediate")
- if (typeof window !== "undefined" && !window.atob) {
- window.atob = require("Base64").atob
- }
- "use strict"
- var map = {
- simple: {
- mappings: "AAAA",
- sources: ["foo.js"],
- names: []
- },
- sourceRoot: {
- mappings: "AAAA",
- sourceRoot: "/static/js/app/",
- sources: ["foo.js", "lib/bar.js", "../vendor/dom.js", "/version.js", "//foo.org/baz.js"],
- names: []
- },
- sourceRootNoSlash: {
- mappings: "AAAA",
- sourceRoot: "/static/js/app",
- sources: ["foo.js", "lib/bar.js", "../vendor/dom.js", "/version.js", "//foo.org/baz.js"],
- names: []
- },
- sourcesContent: {
- mappings: "AAAA",
- sourceRoot: "/static/js/app/",
- sources: ["foo.js", "lib/bar.js", "../vendor/dom.js", "/version.js", "//foo.org/baz.js"],
- sourcesContent: ["foo.js", "lib/bar.js", "../vendor/dom.js", "/version.js", "//foo.org/baz.js"],
- names: []
- },
- mixed: {
- mappings: "AAAA",
- sources: ["foo.js", "lib/bar.js", "../vendor/dom.js", "/version.js", "//foo.org/baz.js"],
- sourcesContent: ["foo.js", null , null , "/version.js", "//foo.org/baz.js"],
- names: []
- }
- }
- map.simpleString = JSON.stringify(map.simple)
- map.XSSIsafe = ")]}'" + map.simpleString
- var code = {
- fileRelative: u("foo.js.map"),
- domainRelative: u("/foo.js.map"),
- schemeRelative: u("//foo.org/foo.js.map"),
- absolute: u("https://foo.org/foo.js.map"),
- dataUri: u("data:application/json," +
- "%7B%22mappings%22%3A%22AAAA%22%2C%22sources%22%3A%5B%22" +
- "foo.js%22%5D%2C%22names%22%3A%5B%5D%7D"),
- base64: u("data:application/json;base64," +
- "eyJtYXBwaW5ncyI6IkFBQUEiLCJzb3VyY2VzIjpbImZvby5qcyJdLCJuYW1lcyI6W119"),
- dataUriText: u("data:text/json," +
- "%7B%22mappings%22%3A%22AAAA%22%2C%22sources%22%3A%5B%22" +
- "foo.js%22%5D%2C%22names%22%3A%5B%5D%7D"),
- dataUriParameter: u("data:application/json;charset=UTF-8;foo=bar," +
- "%7B%22mappings%22%3A%22AAAA%22%2C%22sources%22%3A%5B%22" +
- "foo.js%22%5D%2C%22names%22%3A%5B%5D%7D"),
- dataUriNoMime: u("data:,foo"),
- dataUriInvalidMime: u("data:text/html,foo"),
- dataUriInvalidJSON: u("data:application/json,foo"),
- dataUriXSSIsafe: u("data:application/json," + ")%5D%7D%27" +
- "%7B%22mappings%22%3A%22AAAA%22%2C%22sources%22%3A%5B%22" +
- "foo.js%22%5D%2C%22names%22%3A%5B%5D%7D"),
- dataUriEmpty: u("data:"),
- noMap: ""
- }
- function testResolveSourceMap(method, sync) {
- return function(t) {
- var wrap = (sync ? identity : asyncify)
- var codeUrl = "http://example.com/a/b/c/foo.js"
- t.plan(1 + 18*3)
- t.equal(typeof method, "function", "is a function")
- if (sync) {
- method = asyncify(method)
- }
- var next = false
- function isAsync() { t.ok(next, "is async") }
- method(code.fileRelative, codeUrl, wrap(read(map.simpleString)), function(error, result) {
- t.error(error)
- t.deepEqual(result, {
- sourceMappingURL: "foo.js.map",
- url: "http://example.com/a/b/c/foo.js.map",
- sourcesRelativeTo: "http://example.com/a/b/c/foo.js.map",
- map: map.simple
- }, "fileRelative")
- isAsync()
- })
- method(code.domainRelative, codeUrl, wrap(read(map.simpleString)), function(error, result) {
- t.error(error)
- t.deepEqual(result, {
- sourceMappingURL: "/foo.js.map",
- url: "http://example.com/foo.js.map",
- sourcesRelativeTo: "http://example.com/foo.js.map",
- map: map.simple
- }, "domainRelative")
- isAsync()
- })
- method(code.schemeRelative, codeUrl, wrap(read(map.simpleString)), function(error, result) {
- t.error(error)
- t.deepEqual(result, {
- sourceMappingURL: "//foo.org/foo.js.map",
- url: "http://foo.org/foo.js.map",
- sourcesRelativeTo: "http://foo.org/foo.js.map",
- map: map.simple
- }, "schemeRelative")
- isAsync()
- })
- method(code.absolute, codeUrl, wrap(read(map.simpleString)), function(error, result) {
- t.error(error)
- t.deepEqual(result, {
- sourceMappingURL: "https://foo.org/foo.js.map",
- url: "https://foo.org/foo.js.map",
- sourcesRelativeTo: "https://foo.org/foo.js.map",
- map: map.simple
- }, "absolute")
- isAsync()
- })
- method(code.dataUri, codeUrl, wrap(Throws), function(error, result) {
- t.error(error)
- t.deepEqual(result, {
- sourceMappingURL: "data:application/json," +
- "%7B%22mappings%22%3A%22AAAA%22%2C%22sources%22%3A%5B%22" +
- "foo.js%22%5D%2C%22names%22%3A%5B%5D%7D",
- url: null,
- sourcesRelativeTo: codeUrl,
- map: map.simple
- }, "dataUri")
- isAsync()
- })
- method(code.base64, codeUrl, wrap(Throws), function(error, result) {
- t.error(error)
- t.deepEqual(result, {
- sourceMappingURL: "data:application/json;base64," +
- "eyJtYXBwaW5ncyI6IkFBQUEiLCJzb3VyY2VzIjpbImZvby5qcyJdLCJuYW1lcyI6W119",
- url: null,
- sourcesRelativeTo: codeUrl,
- map: map.simple
- }, "base64")
- isAsync()
- })
- method(code.dataUriText, codeUrl, wrap(Throws), function(error, result) {
- t.error(error)
- t.deepEqual(result, {
- sourceMappingURL: "data:text/json," +
- "%7B%22mappings%22%3A%22AAAA%22%2C%22sources%22%3A%5B%22" +
- "foo.js%22%5D%2C%22names%22%3A%5B%5D%7D",
- url: null,
- sourcesRelativeTo: codeUrl,
- map: map.simple
- }, "dataUriText")
- isAsync()
- })
- method(code.dataUriParameter, codeUrl, wrap(Throws), function(error, result) {
- t.error(error)
- t.deepEqual(result, {
- sourceMappingURL: "data:application/json;charset=UTF-8;foo=bar," +
- "%7B%22mappings%22%3A%22AAAA%22%2C%22sources%22%3A%5B%22" +
- "foo.js%22%5D%2C%22names%22%3A%5B%5D%7D",
- url: null,
- sourcesRelativeTo: codeUrl,
- map: map.simple
- }, "dataUriParameter")
- isAsync()
- })
- method(code.dataUriNoMime, codeUrl, wrap(Throws), function(error, result) {
- t.ok(error.message.match(/mime type.+text\/plain/), "dataUriNoMime")
- t.notOk(result)
- isAsync()
- })
- method(code.dataUriInvalidMime, codeUrl, wrap(Throws), function(error, result) {
- t.ok(error.message.match(/mime type.+text\/html/), "dataUriInvalidMime")
- t.notOk(result)
- isAsync()
- })
- method(code.dataUriInvalidJSON, codeUrl, wrap(Throws), function(error, result) {
- t.ok(error instanceof SyntaxError && error.message !== "data:application/json,foo",
- "dataUriInvalidJSON")
- t.notOk(result)
- isAsync()
- })
- method(code.dataUriXSSIsafe, codeUrl, wrap(Throws), function(error, result) {
- t.error(error)
- t.deepEqual(result, {
- sourceMappingURL: "data:application/json," + ")%5D%7D%27" +
- "%7B%22mappings%22%3A%22AAAA%22%2C%22sources%22%3A%5B%22" +
- "foo.js%22%5D%2C%22names%22%3A%5B%5D%7D",
- url: null,
- sourcesRelativeTo: codeUrl,
- map: map.simple
- }, "dataUriXSSIsafe")
- isAsync()
- })
- method(code.dataUriEmpty, codeUrl, wrap(Throws), function(error, result) {
- t.ok(error.message.match(/mime type.+text\/plain/), "dataUriEmpty")
- t.notOk(result)
- isAsync()
- })
- method(code.noMap, codeUrl, wrap(Throws), function(error, result) {
- t.error(error)
- t.equal(result, null, "noMap")
- isAsync()
- })
- method(code.absolute, codeUrl, wrap(read([map.simpleString])), function(error, result) {
- t.error(error)
- t.deepEqual(result, {
- sourceMappingURL: "https://foo.org/foo.js.map",
- url: "https://foo.org/foo.js.map",
- sourcesRelativeTo: "https://foo.org/foo.js.map",
- map: map.simple
- }, "read non-string")
- isAsync()
- })
- method(code.absolute, codeUrl, wrap(read("invalid JSON")), function(error, result) {
- t.ok(error instanceof SyntaxError, "read invalid JSON")
- t.notOk(result)
- isAsync()
- })
- method(code.absolute, codeUrl, wrap(read(map.XSSIsafe)), function(error, result) {
- t.error(error)
- t.deepEqual(result, {
- sourceMappingURL: "https://foo.org/foo.js.map",
- url: "https://foo.org/foo.js.map",
- sourcesRelativeTo: "https://foo.org/foo.js.map",
- map: map.simple
- }, "XSSIsafe map")
- isAsync()
- })
- method(code.absolute, codeUrl, wrap(Throws), function(error, result) {
- t.equal(error.message, "https://foo.org/foo.js.map", "read throws")
- t.notOk(result)
- isAsync()
- })
- next = true
- }
- }
- test(".resolveSourceMap", testResolveSourceMap(sourceMapResolve.resolveSourceMap, false))
- test(".resolveSourceMapSync", testResolveSourceMap(sourceMapResolve.resolveSourceMapSync, true))
- function testResolveSources(method, sync) {
- return function(t) {
- var wrap = (sync ? identity : asyncify)
- var mapUrl = "http://example.com/a/b/c/foo.js.map"
- t.plan(1 + 7*3 + 4)
- t.equal(typeof method, "function", "is a function")
- if (sync) {
- method = asyncify(method)
- }
- var next = false
- function isAsync() { t.ok(next, "is async") }
- var options
- method(map.simple, mapUrl, wrap(identity), function(error, result) {
- t.error(error)
- t.deepEqual(result, {
- sourcesResolved: ["http://example.com/a/b/c/foo.js"],
- sourcesContent: ["http://example.com/a/b/c/foo.js"]
- }, "simple")
- isAsync()
- })
- method(map.sourceRoot, mapUrl, wrap(identity), function(error, result) {
- t.error(error)
- t.deepEqual(result, {
- sourcesResolved: [
- "http://example.com/static/js/app/foo.js",
- "http://example.com/static/js/app/lib/bar.js",
- "http://example.com/static/js/vendor/dom.js",
- "http://example.com/version.js",
- "http://foo.org/baz.js"
- ],
- sourcesContent: [
- "http://example.com/static/js/app/foo.js",
- "http://example.com/static/js/app/lib/bar.js",
- "http://example.com/static/js/vendor/dom.js",
- "http://example.com/version.js",
- "http://foo.org/baz.js"
- ]
- }, "sourceRoot")
- isAsync()
- })
- options = {ignoreSourceRoot: true}
- method(map.sourceRoot, mapUrl, wrap(identity), options, function(error, result) {
- t.error(error)
- t.deepEqual(result, {
- sourcesResolved: [
- "http://example.com/a/b/c/foo.js",
- "http://example.com/a/b/c/lib/bar.js",
- "http://example.com/a/b/vendor/dom.js",
- "http://example.com/version.js",
- "http://foo.org/baz.js"
- ],
- sourcesContent: [
- "http://example.com/a/b/c/foo.js",
- "http://example.com/a/b/c/lib/bar.js",
- "http://example.com/a/b/vendor/dom.js",
- "http://example.com/version.js",
- "http://foo.org/baz.js"
- ]
- }, "ignore sourceRoot")
- isAsync()
- })
- method(map.sourceRootNoSlash, mapUrl, wrap(identity), function(error, result) {
- t.error(error)
- t.deepEqual(result, {
- sourcesResolved: [
- "http://example.com/static/js/app/foo.js",
- "http://example.com/static/js/app/lib/bar.js",
- "http://example.com/static/js/vendor/dom.js",
- "http://example.com/version.js",
- "http://foo.org/baz.js"
- ],
- sourcesContent: [
- "http://example.com/static/js/app/foo.js",
- "http://example.com/static/js/app/lib/bar.js",
- "http://example.com/static/js/vendor/dom.js",
- "http://example.com/version.js",
- "http://foo.org/baz.js"
- ]
- }, "sourceRootNoSlash")
- isAsync()
- })
- method(map.sourcesContent, mapUrl, wrap(Throws), function(error, result) {
- t.error(error)
- t.deepEqual(result, {
- sourcesResolved: [
- "http://example.com/static/js/app/foo.js",
- "http://example.com/static/js/app/lib/bar.js",
- "http://example.com/static/js/vendor/dom.js",
- "http://example.com/version.js",
- "http://foo.org/baz.js"
- ],
- sourcesContent: [
- "foo.js",
- "lib/bar.js",
- "../vendor/dom.js",
- "/version.js",
- "//foo.org/baz.js"
- ]
- }, "sourcesContent")
- isAsync()
- })
- method(map.mixed, mapUrl, wrap(identity), function(error, result) {
- t.error(error)
- t.deepEqual(result, {
- sourcesResolved: [
- "http://example.com/a/b/c/foo.js",
- "http://example.com/a/b/c/lib/bar.js",
- "http://example.com/a/b/vendor/dom.js",
- "http://example.com/version.js",
- "http://foo.org/baz.js"
- ],
- sourcesContent: [
- "foo.js",
- "http://example.com/a/b/c/lib/bar.js",
- "http://example.com/a/b/vendor/dom.js",
- "/version.js",
- "//foo.org/baz.js"
- ]
- }, "mixed")
- isAsync()
- })
- method(map.simple, mapUrl, wrap(read(["non", "string"])), function(error, result) {
- t.error(error)
- t.deepEqual(result, {
- sourcesResolved: ["http://example.com/a/b/c/foo.js"],
- sourcesContent: ["non,string"]
- }, "read non-string")
- isAsync()
- })
- var calledBack = false
- method(map.mixed, mapUrl, wrap(Throws), function(error, result) {
- t.equal(calledBack, false)
- calledBack = true
- t.equal(error.message, "http://example.com/a/b/c/lib/bar.js", "read throws")
- t.notOk(result)
- isAsync()
- })
- next = true
- }
- }
- test(".resolveSources", testResolveSources(sourceMapResolve.resolveSources, false))
- test(".resolveSourcesSync", testResolveSources(sourceMapResolve.resolveSourcesSync, true))
- test(".resolveSourcesSync no read", function(t) {
- t.plan(1)
- var mapUrl = "http://example.com/a/b/c/foo.js.map"
- var result = sourceMapResolve.resolveSourcesSync(map.mixed, mapUrl, null)
- t.deepEqual(result, {
- sourcesResolved: [
- "http://example.com/a/b/c/foo.js",
- "http://example.com/a/b/c/lib/bar.js",
- "http://example.com/a/b/vendor/dom.js",
- "http://example.com/version.js",
- "http://foo.org/baz.js"
- ],
- sourcesContent: []
- })
- })
- function testResolve(method, sync) {
- return function(t) {
- var wrap = (sync ? identity : asyncify)
- var wrapMap = function(mapFn, fn) {
- return wrap(function(url) {
- if (/\.map$/.test(url)) {
- return mapFn(url)
- }
- return fn(url)
- })
- }
- var codeUrl = "http://example.com/a/b/c/foo.js"
- t.plan(1 + 18*3 + 7*4 + 4)
- t.equal(typeof method, "function", "is a function")
- if (sync) {
- method = asyncify(method)
- }
- var next = false
- function isAsync() { t.ok(next, "is async") }
- var readSimple = wrapMap(read(map.simpleString), identity)
- method(code.fileRelative, codeUrl, readSimple, function(error, result) {
- t.error(error)
- t.deepEqual(result, {
- sourceMappingURL: "foo.js.map",
- url: "http://example.com/a/b/c/foo.js.map",
- sourcesRelativeTo: "http://example.com/a/b/c/foo.js.map",
- map: map.simple,
- sourcesResolved: ["http://example.com/a/b/c/foo.js"],
- sourcesContent: ["http://example.com/a/b/c/foo.js"]
- }, "fileRelative")
- isAsync()
- })
- method(code.domainRelative, codeUrl, readSimple, function(error, result) {
- t.error(error)
- t.deepEqual(result, {
- sourceMappingURL: "/foo.js.map",
- url: "http://example.com/foo.js.map",
- sourcesRelativeTo: "http://example.com/foo.js.map",
- map: map.simple,
- sourcesResolved: ["http://example.com/foo.js"],
- sourcesContent: ["http://example.com/foo.js"]
- }, "domainRelative")
- isAsync()
- })
- method(code.schemeRelative, codeUrl, readSimple, function(error, result) {
- t.error(error)
- t.deepEqual(result, {
- sourceMappingURL: "//foo.org/foo.js.map",
- url: "http://foo.org/foo.js.map",
- sourcesRelativeTo: "http://foo.org/foo.js.map",
- map: map.simple,
- sourcesResolved: ["http://foo.org/foo.js"],
- sourcesContent: ["http://foo.org/foo.js"]
- }, "schemeRelative")
- isAsync()
- })
- method(code.absolute, codeUrl, readSimple, function(error, result) {
- t.error(error)
- t.deepEqual(result, {
- sourceMappingURL: "https://foo.org/foo.js.map",
- url: "https://foo.org/foo.js.map",
- sourcesRelativeTo: "https://foo.org/foo.js.map",
- map: map.simple,
- sourcesResolved: ["https://foo.org/foo.js"],
- sourcesContent: ["https://foo.org/foo.js"]
- }, "absolute")
- isAsync()
- })
- method(code.dataUri, codeUrl, wrapMap(Throws, identity), function(error, result) {
- t.error(error)
- t.deepEqual(result, {
- sourceMappingURL: "data:application/json," +
- "%7B%22mappings%22%3A%22AAAA%22%2C%22sources%22%3A%5B%22" +
- "foo.js%22%5D%2C%22names%22%3A%5B%5D%7D",
- url: null,
- sourcesRelativeTo: codeUrl,
- map: map.simple,
- sourcesResolved: ["http://example.com/a/b/c/foo.js"],
- sourcesContent: ["http://example.com/a/b/c/foo.js"]
- }, "dataUri")
- isAsync()
- })
- method(code.base64, codeUrl, wrapMap(Throws, identity), function(error, result) {
- t.error(error)
- t.deepEqual(result, {
- sourceMappingURL: "data:application/json;base64," +
- "eyJtYXBwaW5ncyI6IkFBQUEiLCJzb3VyY2VzIjpbImZvby5qcyJdLCJuYW1lcyI6W119",
- url: null,
- sourcesRelativeTo: codeUrl,
- map: map.simple,
- sourcesResolved: ["http://example.com/a/b/c/foo.js"],
- sourcesContent: ["http://example.com/a/b/c/foo.js"]
- }, "base64")
- isAsync()
- })
- method(code.dataUriText, codeUrl, wrapMap(Throws, identity), function(error, result) {
- t.error(error)
- t.deepEqual(result, {
- sourceMappingURL: "data:text/json," +
- "%7B%22mappings%22%3A%22AAAA%22%2C%22sources%22%3A%5B%22" +
- "foo.js%22%5D%2C%22names%22%3A%5B%5D%7D",
- url: null,
- sourcesRelativeTo: codeUrl,
- map: map.simple,
- sourcesResolved: ["http://example.com/a/b/c/foo.js"],
- sourcesContent: ["http://example.com/a/b/c/foo.js"]
- }, "dataUriText")
- isAsync()
- })
- method(code.dataUriParameter, codeUrl, wrapMap(Throws, identity), function(error, result) {
- t.error(error)
- t.deepEqual(result, {
- sourceMappingURL: "data:application/json;charset=UTF-8;foo=bar," +
- "%7B%22mappings%22%3A%22AAAA%22%2C%22sources%22%3A%5B%22" +
- "foo.js%22%5D%2C%22names%22%3A%5B%5D%7D",
- url: null,
- sourcesRelativeTo: codeUrl,
- map: map.simple,
- sourcesResolved: ["http://example.com/a/b/c/foo.js"],
- sourcesContent: ["http://example.com/a/b/c/foo.js"]
- }, "dataUriParameter")
- isAsync()
- })
- method(code.dataUriNoMime, codeUrl, wrap(Throws), function(error, result) {
- t.ok(error.message.match(/mime type.+text\/plain/), "dataUriNoMime")
- t.notOk(result)
- isAsync()
- })
- method(code.dataUriInvalidMime, codeUrl, wrap(Throws), function(error, result) {
- t.ok(error.message.match(/mime type.+text\/html/), "dataUriInvalidMime")
- t.notOk(result)
- isAsync()
- })
- method(code.dataUriInvalidJSON, codeUrl, wrap(Throws), function(error, result) {
- t.ok(error instanceof SyntaxError && error.message !== "data:application/json,foo",
- "dataUriInvalidJSON")
- t.notOk(result)
- isAsync()
- })
- method(code.dataUriXSSIsafe, codeUrl, wrapMap(Throws, identity), function(error, result) {
- t.error(error)
- t.deepEqual(result, {
- sourceMappingURL: "data:application/json," + ")%5D%7D%27" +
- "%7B%22mappings%22%3A%22AAAA%22%2C%22sources%22%3A%5B%22" +
- "foo.js%22%5D%2C%22names%22%3A%5B%5D%7D",
- url: null,
- sourcesRelativeTo: codeUrl,
- map: map.simple,
- sourcesResolved: ["http://example.com/a/b/c/foo.js"],
- sourcesContent: ["http://example.com/a/b/c/foo.js"]
- }, "dataUriXSSIsafe")
- isAsync()
- })
- method(code.dataUriEmpty, codeUrl, wrap(Throws), function(error, result) {
- t.ok(error.message.match(/mime type.+text\/plain/), "dataUriEmpty")
- t.notOk(result)
- isAsync()
- })
- method(code.noMap, codeUrl, wrap(Throws), function(error, result) {
- t.error(error)
- t.equal(result, null, "noMap")
- isAsync()
- })
- method(code.absolute, codeUrl, wrap(read([map.simpleString])), function(error, result) {
- t.error(error)
- t.deepEqual(result, {
- sourceMappingURL: "https://foo.org/foo.js.map",
- url: "https://foo.org/foo.js.map",
- sourcesRelativeTo: "https://foo.org/foo.js.map",
- map: map.simple,
- sourcesResolved: ["https://foo.org/foo.js"],
- sourcesContent: [map.simpleString]
- }, "read non-string")
- isAsync()
- })
- method(code.absolute, codeUrl, wrap(read("invalid JSON")), function(error, result) {
- t.ok(error instanceof SyntaxError, "read invalid JSON")
- t.notOk(result)
- isAsync()
- })
- method(code.absolute, codeUrl, wrapMap(read(map.XSSIsafe), identity), function(error, result) {
- t.error(error)
- t.deepEqual(result, {
- sourceMappingURL: "https://foo.org/foo.js.map",
- url: "https://foo.org/foo.js.map",
- sourcesRelativeTo: "https://foo.org/foo.js.map",
- map: map.simple,
- sourcesResolved: ["https://foo.org/foo.js"],
- sourcesContent: ["https://foo.org/foo.js"]
- }, "XSSIsafe map")
- isAsync()
- })
- method(code.absolute, codeUrl, wrap(Throws), function(error, result) {
- t.equal(error.message, "https://foo.org/foo.js.map", "read throws")
- t.notOk(result)
- isAsync()
- })
- function readMap(what) {
- return wrapMap(read(JSON.stringify(what)), identity)
- }
- var options
- method(code.fileRelative, codeUrl, readMap(map.simple), function(error, result) {
- t.error(error)
- t.deepEqual(result.sourcesResolved, ["http://example.com/a/b/c/foo.js"], "simple")
- t.deepEqual(result.sourcesContent, ["http://example.com/a/b/c/foo.js"], "simple")
- isAsync()
- })
- method(code.fileRelative, codeUrl, readMap(map.sourceRoot), function(error, result) {
- t.error(error)
- t.deepEqual(result.sourcesResolved, [
- "http://example.com/static/js/app/foo.js",
- "http://example.com/static/js/app/lib/bar.js",
- "http://example.com/static/js/vendor/dom.js",
- "http://example.com/version.js",
- "http://foo.org/baz.js"
- ], "sourceRoot")
- t.deepEqual(result.sourcesContent, [
- "http://example.com/static/js/app/foo.js",
- "http://example.com/static/js/app/lib/bar.js",
- "http://example.com/static/js/vendor/dom.js",
- "http://example.com/version.js",
- "http://foo.org/baz.js"
- ], "sourceRoot")
- isAsync()
- })
- options = {ignoreSourceRoot: true}
- method(code.fileRelative, codeUrl, readMap(map.sourceRoot), options, function(error, result) {
- t.error(error)
- t.deepEqual(result.sourcesResolved, [
- "http://example.com/a/b/c/foo.js",
- "http://example.com/a/b/c/lib/bar.js",
- "http://example.com/a/b/vendor/dom.js",
- "http://example.com/version.js",
- "http://foo.org/baz.js"
- ], "sourceRoot")
- t.deepEqual(result.sourcesContent, [
- "http://example.com/a/b/c/foo.js",
- "http://example.com/a/b/c/lib/bar.js",
- "http://example.com/a/b/vendor/dom.js",
- "http://example.com/version.js",
- "http://foo.org/baz.js"
- ], "ignore sourceRoot")
- isAsync()
- })
- method(code.fileRelative, codeUrl, readMap(map.sourceRootNoSlash), function(error, result) {
- t.error(error)
- t.deepEqual(result.sourcesResolved, [
- "http://example.com/static/js/app/foo.js",
- "http://example.com/static/js/app/lib/bar.js",
- "http://example.com/static/js/vendor/dom.js",
- "http://example.com/version.js",
- "http://foo.org/baz.js"
- ], "sourceRootNoSlash")
- t.deepEqual(result.sourcesContent, [
- "http://example.com/static/js/app/foo.js",
- "http://example.com/static/js/app/lib/bar.js",
- "http://example.com/static/js/vendor/dom.js",
- "http://example.com/version.js",
- "http://foo.org/baz.js"
- ], "sourceRootNoSlash")
- isAsync()
- })
- method(code.fileRelative, codeUrl, readMap(map.sourcesContent), function(error, result) {
- t.error(error)
- t.deepEqual(result.sourcesResolved, [
- "http://example.com/static/js/app/foo.js",
- "http://example.com/static/js/app/lib/bar.js",
- "http://example.com/static/js/vendor/dom.js",
- "http://example.com/version.js",
- "http://foo.org/baz.js"
- ], "sourcesContent")
- t.deepEqual(result.sourcesContent, [
- "foo.js",
- "lib/bar.js",
- "../vendor/dom.js",
- "/version.js",
- "//foo.org/baz.js"
- ], "sourcesContent")
- isAsync()
- })
- method(code.fileRelative, codeUrl, readMap(map.mixed), function(error, result) {
- t.error(error)
- t.deepEqual(result.sourcesResolved, [
- "http://example.com/a/b/c/foo.js",
- "http://example.com/a/b/c/lib/bar.js",
- "http://example.com/a/b/vendor/dom.js",
- "http://example.com/version.js",
- "http://foo.org/baz.js"
- ], "mixed")
- t.deepEqual(result.sourcesContent, [
- "foo.js",
- "http://example.com/a/b/c/lib/bar.js",
- "http://example.com/a/b/vendor/dom.js",
- "/version.js",
- "//foo.org/baz.js"
- ], "mixed")
- isAsync()
- })
- method(code.fileRelative, codeUrl, wrap(read([map.simpleString])), function(error, result) {
- t.error(error)
- t.deepEqual(result.sourcesResolved, ["http://example.com/a/b/c/foo.js"], "read non-string")
- t.deepEqual(result.sourcesContent, [map.simpleString], "read non-string")
- isAsync()
- })
- function ThrowsMap(what) {
- return wrapMap(read(JSON.stringify(what)), Throws)
- }
- var calledBack = false
- method(code.fileRelative, codeUrl, ThrowsMap(map.mixed), function(error, result) {
- t.equal(calledBack, false)
- calledBack = true
- t.equal(error.message, "http://example.com/a/b/c/lib/bar.js", "read throws")
- t.notOk(result)
- isAsync()
- })
- next = true
- }
- }
- test(".resolve", testResolve(sourceMapResolve.resolve, false))
- test(".resolveSync", testResolve(sourceMapResolve.resolveSync, true))
|