modif comtabilite

This commit is contained in:
2019-01-16 16:23:31 +01:00
parent 6b741a9666
commit 9312edc3ae
1844 changed files with 158848 additions and 55874 deletions
+2 -1
View File
@@ -40,6 +40,7 @@
"afterEach": false,
"define": false,
"window": false,
"atob": true
"atob": true,
"JSON": false
}
}
@@ -1,2 +0,0 @@
.*
!.jshintrc
@@ -0,0 +1,3 @@
language: node_js
node_js:
- "node"
+21
View File
@@ -0,0 +1,21 @@
The MIT License (MIT)
Copyright (c) 2014, 2015, 2016, 2017 Simon Lydell
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
+3 -3
View File
@@ -1,6 +1,6 @@
{
"name": "source-map-resolve",
"version": "0.3.1",
"version": "0.5.2",
"author": "Simon Lydell",
"license": "MIT",
"description": "Resolve the source map and/or sources for a generated file.",
@@ -24,7 +24,7 @@
".*"
],
"dependencies": {
"source-map-url": "~0.3.0",
"resolve-url": "~0.2.1"
"source-map-url": "^0.4.0",
"resolve-url": "^0.2.1"
}
}
@@ -1,3 +1,43 @@
### Version 0.5.2 (2018-05-10) ###
- Improved: Updated the version range of `atob` to disallow depending on `2.0.3`
which as a [security
vulnerability](https://snyk.io/test/npm/atob/2.0.3?severity=high&severity=medium&severity=low).
### Version 0.5.1 (2017-10-21) ###
- Fixed: URLs are now decoded before being passed to `read` in Node.js. This
allows reading files with spaces, for example.
- Fixed: Missing or empty `sources` fields (such as `sources: []`) in source
maps are now handled. Previously, such source maps would cause crashes or
callbacks never bing called. Now, an empty result is produced:
```js
sourcesResolved: [],
sourcesContent: []
```
### Version 0.5.0 (2016-02-28) ###
- Improved: Errors now have a `sourceMapData` property that contain as much as
possible of the intended result of the function up until the error occurred.
- Changed: `resolveSources` and `resolve`, as well as their `*Sync`
alternatives, no longer fail when one single source fails to be fetched.
Instead, the `sourcesContent` array in the result object will contain error
objects for all failed sources, and strings otherwise. (Backwards-incompatible
change.)
### Version 0.4.0 (2015-08-29) ###
- Removed: The `ignoreSourceRoot` option of `resolveSources`. It has been
replaced with `sourceRoot: false`. (Backwards-incompatible change.)
- Added: The `sourceRoot` option of `resolveSources`. It not only allows to
ignore the source root, it also lets you replace it.
- Added: The `parseMapToJSON` method.
- Added: The `resolve` method now accepts `null, mapUrl, ...` as arguments, in
addition to the existing signature, which will read `mapUrl` instead of
looking for a sourceMappingURL in the code.
### Version 0.3.1 (2014-08-16) ###
- Improved: Updated the source-map-url dependency to 0.3.0.
+2 -2
View File
@@ -1,6 +1,6 @@
{
"name": "source-map-resolve",
"version": "0.3.1",
"version": "0.5.2",
"author": "Simon Lydell",
"license": "MIT",
"description": "Resolve the source map and/or sources for a generated file.",
@@ -23,7 +23,7 @@
"source-map-resolve.js"
],
"dependencies": {
"lydell/source-map-url": "~0.3.0",
"lydell/source-map-url": "~0.4.0",
"lydell/resolve-url": "~0.2.1"
}
}
@@ -1,4 +1,4 @@
// Copyright 2014 Simon Lydell
// Copyright 2014, 2017 Simon Lydell
// X11 (“MIT”) Licensed. (See LICENSE.)
var fs = require("fs")
@@ -14,6 +14,9 @@ nodeCode = nodeCode
// Remove `urix`.
.replace(/(\w+)\s*=\s*urix\(\1\)\s*/g, "")
// Remove `decode-uri-component`.
.replace(/(var readUrl = )decodeUriComponent\(([\w.]+)\)/g, "$1$2")
// Change `module.exports = {...}` to `return {...}`.
.replace(/module\.exports = (\{[^}]+\})\s*$/, "return $1")
@@ -0,0 +1,11 @@
// Copyright 2017 Simon Lydell
// X11 (“MIT”) Licensed. (See LICENSE.)
var decodeUriComponent = require("decode-uri-component")
function customDecodeUriComponent(string) {
// `decodeUriComponent` turns `+` into ` `, but that's not wanted.
return decodeUriComponent(string.replace(/\+/g, "%2B"))
}
module.exports = customDecodeUriComponent
@@ -1,10 +1,11 @@
// Copyright 2014 Simon Lydell
// Copyright 2014, 2015, 2016, 2017 Simon Lydell
// X11 (“MIT”) Licensed. (See LICENSE.)
var sourceMappingURL = require("source-map-url")
var resolveUrl = require("./resolve-url")
var urix = require("urix")
var atob = require("atob")
var sourceMappingURL = require("source-map-url")
var resolveUrl = require("./resolve-url")
var decodeUriComponent = require("./decode-uri-component")
var urix = require("urix")
var atob = require("atob")
@@ -12,8 +13,23 @@ function callbackAsync(callback, error, result) {
setImmediate(function() { callback(error, result) })
}
function parseMapToJSON(string) {
return JSON.parse(string.replace(/^\)\]\}'/, ""))
function parseMapToJSON(string, data) {
try {
return JSON.parse(string.replace(/^\)\]\}'/, ""))
} catch (error) {
error.sourceMapData = data
throw error
}
}
function readSync(read, url, data) {
var readUrl = decodeUriComponent(url)
try {
return String(read(readUrl))
} catch (error) {
error.sourceMapData = data
throw error
}
}
@@ -28,12 +44,15 @@ function resolveSourceMap(code, codeUrl, read, callback) {
if (!mapData || mapData.map) {
return callbackAsync(callback, null, mapData)
}
read(mapData.url, function(error, result) {
var readUrl = decodeUriComponent(mapData.url)
read(readUrl, function(error, result) {
if (error) {
error.sourceMapData = mapData
return callback(error)
}
mapData.map = String(result)
try {
mapData.map = parseMapToJSON(String(result))
mapData.map = parseMapToJSON(mapData.map, mapData)
} catch (error) {
return callback(error)
}
@@ -46,7 +65,8 @@ function resolveSourceMapSync(code, codeUrl, read) {
if (!mapData || mapData.map) {
return mapData
}
mapData.map = parseMapToJSON(String(read(mapData.url)))
mapData.map = readSync(read, mapData.url, mapData)
mapData.map = parseMapToJSON(mapData.map, mapData)
return mapData
}
@@ -64,17 +84,24 @@ function resolveSourceMapHelper(code, codeUrl) {
var dataUri = url.match(dataUriRegex)
if (dataUri) {
var mimeType = dataUri[1]
var lastParameter = dataUri[2]
var encoded = dataUri[3]
if (!jsonMimeTypeRegex.test(mimeType)) {
throw new Error("Unuseful data uri mime type: " + (mimeType || "text/plain"))
}
return {
var lastParameter = dataUri[2] || ""
var encoded = dataUri[3] || ""
var data = {
sourceMappingURL: url,
url: null,
sourcesRelativeTo: codeUrl,
map: parseMapToJSON(lastParameter === ";base64" ? atob(encoded) : decodeURIComponent(encoded))
map: encoded
}
if (!jsonMimeTypeRegex.test(mimeType)) {
var error = new Error("Unuseful data uri mime type: " + (mimeType || "text/plain"))
error.sourceMapData = data
throw error
}
data.map = parseMapToJSON(
lastParameter === ";base64" ? atob(encoded) : decodeURIComponent(encoded),
data
)
return data
}
var mapUrl = resolveUrl(codeUrl, url)
@@ -93,21 +120,18 @@ function resolveSources(map, mapUrl, read, options, callback) {
callback = options
options = {}
}
var pending = map.sources.length
var errored = false
var pending = map.sources ? map.sources.length : 0
var result = {
sourcesResolved: [],
sourcesContent: []
}
var done = function(error) {
if (errored) {
return
}
if (error) {
errored = true
return callback(error)
}
if (pending === 0) {
callbackAsync(callback, null, result)
return
}
var done = function() {
pending--
if (pending === 0) {
callback(null, result)
@@ -120,9 +144,10 @@ function resolveSources(map, mapUrl, read, options, callback) {
result.sourcesContent[index] = sourceContent
callbackAsync(done, null)
} else {
read(fullUrl, function(error, source) {
result.sourcesContent[index] = String(source)
done(error)
var readUrl = decodeUriComponent(fullUrl)
read(readUrl, function(error, source) {
result.sourcesContent[index] = error ? error : String(source)
done()
})
}
})
@@ -133,16 +158,27 @@ function resolveSourcesSync(map, mapUrl, read, options) {
sourcesResolved: [],
sourcesContent: []
}
if (!map.sources || map.sources.length === 0) {
return result
}
resolveSourcesHelper(map, mapUrl, options, function(fullUrl, sourceContent, index) {
result.sourcesResolved[index] = fullUrl
if (read !== null) {
if (typeof sourceContent === "string") {
result.sourcesContent[index] = sourceContent
} else {
result.sourcesContent[index] = String(read(fullUrl))
var readUrl = decodeUriComponent(fullUrl)
try {
result.sourcesContent[index] = String(read(readUrl))
} catch (error) {
result.sourcesContent[index] = error
}
}
}
})
return result
}
@@ -153,14 +189,23 @@ function resolveSourcesHelper(map, mapUrl, options, fn) {
mapUrl = urix(mapUrl)
var fullUrl
var sourceContent
var sourceRoot
for (var index = 0, len = map.sources.length; index < len; index++) {
if (map.sourceRoot && !options.ignoreSourceRoot) {
sourceRoot = null
if (typeof options.sourceRoot === "string") {
sourceRoot = options.sourceRoot
} else if (typeof map.sourceRoot === "string" && options.sourceRoot !== false) {
sourceRoot = map.sourceRoot
}
// If the sourceRoot is the empty string, it is equivalent to not setting
// the property at all.
if (sourceRoot === null || sourceRoot === '') {
fullUrl = resolveUrl(mapUrl, map.sources[index])
} else {
// Make sure that the sourceRoot ends with a slash, so that `/scripts/subdir` becomes
// `/scripts/subdir/<source>`, not `/scripts/<source>`. Pointing to a file as source root
// does not make sense.
fullUrl = resolveUrl(mapUrl, map.sourceRoot.replace(endingSlash, "/"), map.sources[index])
} else {
fullUrl = resolveUrl(mapUrl, map.sources[index])
fullUrl = resolveUrl(mapUrl, sourceRoot.replace(endingSlash, "/"), map.sources[index])
}
sourceContent = (map.sourcesContent || [])[index]
fn(fullUrl, sourceContent, index)
@@ -174,13 +219,41 @@ function resolve(code, codeUrl, read, options, callback) {
callback = options
options = {}
}
resolveSourceMap(code, codeUrl, read, function(error, mapData) {
if (error) {
return callback(error)
}
if (!mapData) {
return callback(null, null)
if (code === null) {
var mapUrl = codeUrl
var data = {
sourceMappingURL: null,
url: mapUrl,
sourcesRelativeTo: mapUrl,
map: null
}
var readUrl = decodeUriComponent(mapUrl)
read(readUrl, function(error, result) {
if (error) {
error.sourceMapData = data
return callback(error)
}
data.map = String(result)
try {
data.map = parseMapToJSON(data.map, data)
} catch (error) {
return callback(error)
}
_resolveSources(data)
})
} else {
resolveSourceMap(code, codeUrl, read, function(error, mapData) {
if (error) {
return callback(error)
}
if (!mapData) {
return callback(null, null)
}
_resolveSources(mapData)
})
}
function _resolveSources(mapData) {
resolveSources(mapData.map, mapData.sourcesRelativeTo, read, options, function(error, result) {
if (error) {
return callback(error)
@@ -189,13 +262,26 @@ function resolve(code, codeUrl, read, options, callback) {
mapData.sourcesContent = result.sourcesContent
callback(null, mapData)
})
})
}
}
function resolveSync(code, codeUrl, read, options) {
var mapData = resolveSourceMapSync(code, codeUrl, read)
if (!mapData) {
return null
var mapData
if (code === null) {
var mapUrl = codeUrl
mapData = {
sourceMappingURL: null,
url: mapUrl,
sourcesRelativeTo: mapUrl,
map: null
}
mapData.map = readSync(read, mapUrl, mapData)
mapData.map = parseMapToJSON(mapData.map, mapData)
} else {
mapData = resolveSourceMapSync(code, codeUrl, read)
if (!mapData) {
return null
}
}
var result = resolveSourcesSync(mapData.map, mapData.sourcesRelativeTo, read, options)
mapData.sourcesResolved = result.sourcesResolved
@@ -211,5 +297,6 @@ module.exports = {
resolveSources: resolveSources,
resolveSourcesSync: resolveSourcesSync,
resolve: resolve,
resolveSync: resolveSync
resolveSync: resolveSync,
parseMapToJSON: parseMapToJSON
}
+24 -39
View File
@@ -1,32 +1,27 @@
{
"_args": [
[
"source-map-resolve@0.3.1",
"/mnt/data/Sites/anissabensalah.net/user/themes/anissabensalah"
]
],
"_from": "source-map-resolve@0.3.1",
"_id": "source-map-resolve@0.3.1",
"_from": "source-map-resolve@^0.5.2",
"_id": "source-map-resolve@0.5.2",
"_inBundle": false,
"_integrity": "sha1-YQ9hIqRFuN1RU1oqcbeD38Ekh2E=",
"_integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==",
"_location": "/source-map-resolve",
"_phantomChildren": {},
"_requested": {
"type": "version",
"type": "range",
"registry": true,
"raw": "source-map-resolve@0.3.1",
"raw": "source-map-resolve@^0.5.2",
"name": "source-map-resolve",
"escapedName": "source-map-resolve",
"rawSpec": "0.3.1",
"rawSpec": "^0.5.2",
"saveSpec": null,
"fetchSpec": "0.3.1"
"fetchSpec": "^0.5.2"
},
"_requiredBy": [
"/css"
],
"_resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.3.1.tgz",
"_spec": "0.3.1",
"_where": "/mnt/data/Sites/anissabensalah.net/user/themes/anissabensalah",
"_resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz",
"_shasum": "72e2cc34095543e43b2c62b2c4c10d4a9054f259",
"_spec": "source-map-resolve@^0.5.2",
"_where": "/home/kevin/Documents/Sites/anissabensalah.net/user/themes/anissabensalah/node_modules/css",
"author": {
"name": "Simon Lydell"
},
@@ -34,19 +29,22 @@
"bugs": {
"url": "https://github.com/lydell/source-map-resolve/issues"
},
"bundleDependencies": false,
"dependencies": {
"atob": "~1.1.0",
"resolve-url": "~0.2.1",
"source-map-url": "~0.3.0",
"urix": "~0.1.0"
"atob": "^2.1.1",
"decode-uri-component": "^0.2.0",
"resolve-url": "^0.2.1",
"source-map-url": "^0.4.0",
"urix": "^0.1.0"
},
"deprecated": false,
"description": "Resolve the source map and/or sources for a generated file.",
"devDependencies": {
"Base64": "~0.2.0",
"jshint": "~2.4.3",
"setimmediate": "~1.0.1",
"simple-asyncify": "~0.1.0",
"tape": "~2.5.0"
"Base64": "1.0.1",
"jshint": "2.9.5",
"setimmediate": "1.0.5",
"simple-asyncify": "1.0.0",
"tape": "4.9.0"
},
"homepage": "https://github.com/lydell/source-map-resolve#readme",
"keywords": [
@@ -75,18 +73,5 @@
"test": "npm run lint && npm run unit",
"unit": "node test/source-map-resolve.js && node test/windows.js"
},
"testling": {
"files": "test/source-map-resolve.js",
"browsers": [
"ie/8..latest",
"chrome/latest",
"firefox/latest",
"opera/12",
"opera/latest",
"safari/5",
"iphone/6",
"android-browser/4"
]
},
"version": "0.3.1"
"version": "0.5.2"
}
+37 -14
View File
@@ -1,8 +1,6 @@
Overview [![Build Status](https://travis-ci.org/lydell/source-map-resolve.png?branch=master)](https://travis-ci.org/lydell/source-map-resolve)
Overview [![Build Status](https://travis-ci.org/lydell/source-map-resolve.svg?branch=master)](https://travis-ci.org/lydell/source-map-resolve)
========
[![browser support](https://ci.testling.com/lydell/source-map-resolve.png)](https://ci.testling.com/lydell/source-map-resolve)
Resolve the source map and/or sources for a generated file.
```js
@@ -117,9 +115,11 @@ If `code` contains no sourceMappingURL, the result is `null`.
`callback(error, content)`. In Node.js you might want to use `fs.readFile`,
while in the browser you might want to use an asynchronus `XMLHttpRequest`.
- `options` is an optional object with any of the following properties:
- `ignoreSourceRoot`: The `sourceRoot` property of source maps might only be
relevant when resolving sources in the browser. This lets you bypass it
when using the module outside of a browser, if needed. Defaults to `false`.
- `sourceRoot`: Override the `sourceRoot` property of the source map, which
might only be relevant when resolving sources in the browser. This lets you
bypass it when using the module outside of a browser, if needed. Pass a
string to replace the `sourceRoot` property with, or `false` to ignore it.
Defaults to `undefined`.
- `callback(error, result)` is a function that is invoked with either an error
or `null` and the result.
@@ -128,21 +128,30 @@ The result is an object with the following properties:
- `sourcesResolved`: The same as `map.sources`, except all the sources are
fully resolved.
- `sourcesContent`: An array with the contents of all sources in `map.sources`,
in the same order as `map.sources`.
in the same order as `map.sources`. If getting the contents of a source fails,
an error object is put into the array instead.
### `sourceMapResolve.resolve(code, codeUrl, read, [options], callback)` ###
The arguments are identical to `sourceMapResolve.resolveSourceMap`, except that
you may also provide the same `options` as in
`sourceMapResolve.resolveSources`.
you may also provide the same `options` as in `sourceMapResolve.resolveSources`.
This is simply a convienience method that first resolves the source map and
then its sources. You could also do this by first calling
This is a convenience method that first resolves the source map and then its
sources. You could also do this by first calling
`sourceMapResolve.resolveSourceMap` and then `sourceMapResolve.resolveSources`.
The result is identical to `sourceMapResolve.resolveSourceMap`, with the
properties from `sourceMapResolve.resolveSources` merged into it.
There is one extra feature available, though. If `code` is `null`, `codeUrl` is
treated as a url to the source map instead of to `code`, and will be read. This
is handy if you _sometimes_ get the source map url from the `SourceMap: <url>`
header (see the [Notes] section). In this case, the `sourceMappingURL` property
of the result is `null`.
[Notes]: #notes
### `sourceMapResolve.*Sync()` ###
There are also sync versions of the three previous functions. They are identical
@@ -160,6 +169,23 @@ empty array. In other words, the sources arent read. You only get the
`sourcesResolved` property. (This only supported in the synchronus version, since
there is no point doing it asynchronusly.)
### `sourceMapResolve.parseMapToJSON(string, [data])` ###
The spec says that if a source map (as a string) starts with `)]}'`, it should
be stripped off. This is to prevent XSSI attacks. This function does that and
returns the result of `JSON.parse`ing whats left.
If this function throws `error`, `error.sourceMapData === data`.
### Errors
All errors passed to callbacks or thrown by this module have a `sourceMapData`
property that contain as much as possible of the intended result of the function
up until the error occurred.
Note that while the `map` property of result objects always is an object,
`error.sourceMapData.map` will be a string if parsing that string fails.
Note
====
@@ -182,9 +208,6 @@ First off, run `npm install` to install testing modules and browser polyfills.
`npm test` lints the code and runs the test suite in Node.js.
To run the tests in a browser, run `testling` (`npm install -g testling`) or
`testling -u`.
x-package.json5
---------------
@@ -1,4 +1,4 @@
// Copyright 2014 Simon Lydell
// Copyright 2014, 2015, 2016, 2017 Simon Lydell
// X11 (“MIT”) Licensed. (See LICENSE.)
// Note: source-map-resolve.js is generated from source-map-resolve-node.js and
@@ -21,8 +21,23 @@ void (function(root, factory) {
setImmediate(function() { callback(error, result) })
}
function parseMapToJSON(string) {
return JSON.parse(string.replace(/^\)\]\}'/, ""))
function parseMapToJSON(string, data) {
try {
return JSON.parse(string.replace(/^\)\]\}'/, ""))
} catch (error) {
error.sourceMapData = data
throw error
}
}
function readSync(read, url, data) {
var readUrl = url
try {
return String(read(readUrl))
} catch (error) {
error.sourceMapData = data
throw error
}
}
@@ -37,12 +52,15 @@ void (function(root, factory) {
if (!mapData || mapData.map) {
return callbackAsync(callback, null, mapData)
}
read(mapData.url, function(error, result) {
var readUrl = mapData.url
read(readUrl, function(error, result) {
if (error) {
error.sourceMapData = mapData
return callback(error)
}
mapData.map = String(result)
try {
mapData.map = parseMapToJSON(String(result))
mapData.map = parseMapToJSON(mapData.map, mapData)
} catch (error) {
return callback(error)
}
@@ -55,7 +73,8 @@ void (function(root, factory) {
if (!mapData || mapData.map) {
return mapData
}
mapData.map = parseMapToJSON(String(read(mapData.url)))
mapData.map = readSync(read, mapData.url, mapData)
mapData.map = parseMapToJSON(mapData.map, mapData)
return mapData
}
@@ -71,17 +90,24 @@ void (function(root, factory) {
var dataUri = url.match(dataUriRegex)
if (dataUri) {
var mimeType = dataUri[1]
var lastParameter = dataUri[2]
var encoded = dataUri[3]
if (!jsonMimeTypeRegex.test(mimeType)) {
throw new Error("Unuseful data uri mime type: " + (mimeType || "text/plain"))
}
return {
var lastParameter = dataUri[2] || ""
var encoded = dataUri[3] || ""
var data = {
sourceMappingURL: url,
url: null,
sourcesRelativeTo: codeUrl,
map: parseMapToJSON(lastParameter === ";base64" ? atob(encoded) : decodeURIComponent(encoded))
map: encoded
}
if (!jsonMimeTypeRegex.test(mimeType)) {
var error = new Error("Unuseful data uri mime type: " + (mimeType || "text/plain"))
error.sourceMapData = data
throw error
}
data.map = parseMapToJSON(
lastParameter === ";base64" ? atob(encoded) : decodeURIComponent(encoded),
data
)
return data
}
var mapUrl = resolveUrl(codeUrl, url)
@@ -100,21 +126,18 @@ void (function(root, factory) {
callback = options
options = {}
}
var pending = map.sources.length
var errored = false
var pending = map.sources ? map.sources.length : 0
var result = {
sourcesResolved: [],
sourcesContent: []
}
var done = function(error) {
if (errored) {
return
}
if (error) {
errored = true
return callback(error)
}
if (pending === 0) {
callbackAsync(callback, null, result)
return
}
var done = function() {
pending--
if (pending === 0) {
callback(null, result)
@@ -127,9 +150,10 @@ void (function(root, factory) {
result.sourcesContent[index] = sourceContent
callbackAsync(done, null)
} else {
read(fullUrl, function(error, source) {
result.sourcesContent[index] = String(source)
done(error)
var readUrl = fullUrl
read(readUrl, function(error, source) {
result.sourcesContent[index] = error ? error : String(source)
done()
})
}
})
@@ -140,16 +164,27 @@ void (function(root, factory) {
sourcesResolved: [],
sourcesContent: []
}
if (!map.sources || map.sources.length === 0) {
return result
}
resolveSourcesHelper(map, mapUrl, options, function(fullUrl, sourceContent, index) {
result.sourcesResolved[index] = fullUrl
if (read !== null) {
if (typeof sourceContent === "string") {
result.sourcesContent[index] = sourceContent
} else {
result.sourcesContent[index] = String(read(fullUrl))
var readUrl = fullUrl
try {
result.sourcesContent[index] = String(read(readUrl))
} catch (error) {
result.sourcesContent[index] = error
}
}
}
})
return result
}
@@ -159,14 +194,23 @@ void (function(root, factory) {
options = options || {}
var fullUrl
var sourceContent
var sourceRoot
for (var index = 0, len = map.sources.length; index < len; index++) {
if (map.sourceRoot && !options.ignoreSourceRoot) {
sourceRoot = null
if (typeof options.sourceRoot === "string") {
sourceRoot = options.sourceRoot
} else if (typeof map.sourceRoot === "string" && options.sourceRoot !== false) {
sourceRoot = map.sourceRoot
}
// If the sourceRoot is the empty string, it is equivalent to not setting
// the property at all.
if (sourceRoot === null || sourceRoot === '') {
fullUrl = resolveUrl(mapUrl, map.sources[index])
} else {
// Make sure that the sourceRoot ends with a slash, so that `/scripts/subdir` becomes
// `/scripts/subdir/<source>`, not `/scripts/<source>`. Pointing to a file as source root
// does not make sense.
fullUrl = resolveUrl(mapUrl, map.sourceRoot.replace(endingSlash, "/"), map.sources[index])
} else {
fullUrl = resolveUrl(mapUrl, map.sources[index])
fullUrl = resolveUrl(mapUrl, sourceRoot.replace(endingSlash, "/"), map.sources[index])
}
sourceContent = (map.sourcesContent || [])[index]
fn(fullUrl, sourceContent, index)
@@ -180,13 +224,41 @@ void (function(root, factory) {
callback = options
options = {}
}
resolveSourceMap(code, codeUrl, read, function(error, mapData) {
if (error) {
return callback(error)
}
if (!mapData) {
return callback(null, null)
if (code === null) {
var mapUrl = codeUrl
var data = {
sourceMappingURL: null,
url: mapUrl,
sourcesRelativeTo: mapUrl,
map: null
}
var readUrl = mapUrl
read(readUrl, function(error, result) {
if (error) {
error.sourceMapData = data
return callback(error)
}
data.map = String(result)
try {
data.map = parseMapToJSON(data.map, data)
} catch (error) {
return callback(error)
}
_resolveSources(data)
})
} else {
resolveSourceMap(code, codeUrl, read, function(error, mapData) {
if (error) {
return callback(error)
}
if (!mapData) {
return callback(null, null)
}
_resolveSources(mapData)
})
}
function _resolveSources(mapData) {
resolveSources(mapData.map, mapData.sourcesRelativeTo, read, options, function(error, result) {
if (error) {
return callback(error)
@@ -195,13 +267,26 @@ void (function(root, factory) {
mapData.sourcesContent = result.sourcesContent
callback(null, mapData)
})
})
}
}
function resolveSync(code, codeUrl, read, options) {
var mapData = resolveSourceMapSync(code, codeUrl, read)
if (!mapData) {
return null
var mapData
if (code === null) {
var mapUrl = codeUrl
mapData = {
sourceMappingURL: null,
url: mapUrl,
sourcesRelativeTo: mapUrl,
map: null
}
mapData.map = readSync(read, mapUrl, mapData)
mapData.map = parseMapToJSON(mapData.map, mapData)
} else {
mapData = resolveSourceMapSync(code, codeUrl, read)
if (!mapData) {
return null
}
}
var result = resolveSourcesSync(mapData.map, mapData.sourcesRelativeTo, read, options)
mapData.sourcesResolved = result.sourcesResolved
@@ -217,7 +302,8 @@ void (function(root, factory) {
resolveSources: resolveSources,
resolveSourcesSync: resolveSourcesSync,
resolve: resolve,
resolveSync: resolveSync
resolveSync: resolveSync,
parseMapToJSON: parseMapToJSON
}
}));
@@ -1,4 +1,4 @@
// Copyright 2014 Simon Lydell
// Copyright 2014, 2015, 2016, 2017 Simon Lydell
// X11 (“MIT”) Licensed. (See LICENSE.)
// Note: source-map-resolve.js is generated from source-map-resolve-node.js and
+105
View File
@@ -0,0 +1,105 @@
// Copyright 2017 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 sourceMapResolve = require("../")
var mapUrl = "operators%20map.json"
var codeUrl = "./built files/operators:+-<>%25.js"
var sourceUrl = "../source files/operators:+-<>%25.coffee"
function readTest(t, files) {
return function(file, callback) {
var fileData = files[file]
t.ok(fileData, "decoded file name")
if (callback) {
callback(null, fileData)
} else {
return fileData
}
}
}
function testResolveSourceMap(method, sync) {
return function(t) {
t.plan(2)
if (sync) {
method = asyncify(method)
}
var read = readTest(t, {
"built files/operators map.json": "{}"
})
method(u(mapUrl), codeUrl, read, function(error) {
t.error(error)
})
}
}
test(".resolveSourceMap", testResolveSourceMap(sourceMapResolve.resolveSourceMap, false))
test(".resolveSourceMapSync", testResolveSourceMap(sourceMapResolve.resolveSourceMapSync, true))
function testResolveSources(method, sync) {
return function(t) {
t.plan(2)
if (sync) {
method = asyncify(method)
}
var map = {
sources: [sourceUrl]
}
var read = readTest(t, {
"../source files/operators:+-<>%.coffee": "source code"
})
method(map, mapUrl, read, function(error) {
t.error(error)
})
}
}
test(".resolveSources", testResolveSources(sourceMapResolve.resolveSources, false))
test(".resolveSourcesSync", testResolveSources(sourceMapResolve.resolveSourcesSync, true))
function testResolve(method, sync) {
return function(t) {
t.plan(3)
if (sync) {
method = asyncify(method)
}
var map = {
sources: [sourceUrl]
}
var read = readTest(t, {
"built files/operators map.json": JSON.stringify(map),
"source files/operators:+-<>%.coffee": "source code"
})
method(u(mapUrl), codeUrl, read, function(error) {
t.error(error)
})
}
}
test(".resolve", testResolve(sourceMapResolve.resolve, false))
test(".resolveSync", testResolve(sourceMapResolve.resolveSync, true))
@@ -1,4 +1,4 @@
// Copyright 2014 Simon Lydell
// Copyright 2014, 2015, 2016, 2017 Simon Lydell
// X11 (“MIT”) Licensed. (See LICENSE.)
var test = require("tape")
@@ -37,6 +37,12 @@ var map = {
sources: ["foo.js", "lib/bar.js", "../vendor/dom.js", "/version.js", "//foo.org/baz.js"],
names: []
},
sourceRootEmpty: {
mappings: "AAAA",
sourceRoot: "",
sources: ["foo.js", "lib/bar.js", "../vendor/dom.js", "/version.js", "//foo.org/baz.js"],
names: []
},
sourcesContent: {
mappings: "AAAA",
sourceRoot: "/static/js/app/",
@@ -49,7 +55,13 @@ var map = {
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: []
}
},
noSources: {
mappings: "",
sources: [],
names: []
},
empty: {}
}
map.simpleString = JSON.stringify(map.simple)
map.XSSIsafe = ")]}'" + map.simpleString
@@ -87,7 +99,7 @@ function testResolveSourceMap(method, sync) {
var codeUrl = "http://example.com/a/b/c/foo.js"
t.plan(1 + 18*3)
t.plan(1 + 12*3 + 6*4)
t.equal(typeof method, "function", "is a function")
@@ -194,18 +206,36 @@ function testResolveSourceMap(method, sync) {
})
method(code.dataUriNoMime, codeUrl, wrap(Throws), function(error, result) {
t.deepEqual(error.sourceMapData, {
sourceMappingURL: "data:,foo",
url: null,
sourcesRelativeTo: codeUrl,
map: "foo"
}, "dataUriNoMime .sourceMapData")
t.ok(error.message.match(/mime type.+text\/plain/), "dataUriNoMime")
t.notOk(result)
isAsync()
})
method(code.dataUriInvalidMime, codeUrl, wrap(Throws), function(error, result) {
t.deepEqual(error.sourceMapData, {
sourceMappingURL: "data:text/html,foo",
url: null,
sourcesRelativeTo: codeUrl,
map: "foo"
}, "dataUriInvalidMime .sourceMapData")
t.ok(error.message.match(/mime type.+text\/html/), "dataUriInvalidMime")
t.notOk(result)
isAsync()
})
method(code.dataUriInvalidJSON, codeUrl, wrap(Throws), function(error, result) {
t.deepEqual(error.sourceMapData, {
sourceMappingURL: "data:application/json,foo",
url: null,
sourcesRelativeTo: codeUrl,
map: "foo"
}, "dataUriInvalidJSON .sourceMapData")
t.ok(error instanceof SyntaxError && error.message !== "data:application/json,foo",
"dataUriInvalidJSON")
t.notOk(result)
@@ -226,6 +256,12 @@ function testResolveSourceMap(method, sync) {
})
method(code.dataUriEmpty, codeUrl, wrap(Throws), function(error, result) {
t.deepEqual(error.sourceMapData, {
sourceMappingURL: "data:",
url: null,
sourcesRelativeTo: codeUrl,
map: ""
}, "dataUriEmpty .sourceMapData")
t.ok(error.message.match(/mime type.+text\/plain/), "dataUriEmpty")
t.notOk(result)
isAsync()
@@ -249,6 +285,12 @@ function testResolveSourceMap(method, sync) {
})
method(code.absolute, codeUrl, wrap(read("invalid JSON")), function(error, result) {
t.deepEqual(error.sourceMapData, {
sourceMappingURL: "https://foo.org/foo.js.map",
url: "https://foo.org/foo.js.map",
sourcesRelativeTo: "https://foo.org/foo.js.map",
map: "invalid JSON"
}, "read invalid JSON .sourceMapData")
t.ok(error instanceof SyntaxError, "read invalid JSON")
t.notOk(result)
isAsync()
@@ -266,6 +308,12 @@ function testResolveSourceMap(method, sync) {
})
method(code.absolute, codeUrl, wrap(Throws), function(error, result) {
t.deepEqual(error.sourceMapData, {
sourceMappingURL: "https://foo.org/foo.js.map",
url: "https://foo.org/foo.js.map",
sourcesRelativeTo: "https://foo.org/foo.js.map",
map: null
}, "read throws .sourceMapData")
t.equal(error.message, "https://foo.org/foo.js.map", "read throws")
t.notOk(result)
isAsync()
@@ -286,7 +334,7 @@ function testResolveSources(method, sync) {
var mapUrl = "http://example.com/a/b/c/foo.js.map"
t.plan(1 + 7*3 + 4)
t.plan(1 + 11*3 + 4)
t.equal(typeof method, "function", "is a function")
@@ -329,7 +377,7 @@ function testResolveSources(method, sync) {
isAsync()
})
options = {ignoreSourceRoot: true}
options = {sourceRoot: false}
method(map.sourceRoot, mapUrl, wrap(identity), options, function(error, result) {
t.error(error)
t.deepEqual(result, {
@@ -351,6 +399,28 @@ function testResolveSources(method, sync) {
isAsync()
})
options = {sourceRoot: "/static/js/"}
method(map.sourceRoot, mapUrl, wrap(identity), options, function(error, result) {
t.error(error)
t.deepEqual(result, {
sourcesResolved: [
"http://example.com/static/js/foo.js",
"http://example.com/static/js/lib/bar.js",
"http://example.com/static/vendor/dom.js",
"http://example.com/version.js",
"http://foo.org/baz.js"
],
sourcesContent: [
"http://example.com/static/js/foo.js",
"http://example.com/static/js/lib/bar.js",
"http://example.com/static/vendor/dom.js",
"http://example.com/version.js",
"http://foo.org/baz.js"
]
}, "custom sourceRoot")
isAsync()
})
method(map.sourceRootNoSlash, mapUrl, wrap(identity), function(error, result) {
t.error(error)
t.deepEqual(result, {
@@ -372,6 +442,27 @@ function testResolveSources(method, sync) {
isAsync()
})
method(map.sourceRootEmpty, 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: [
"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"
]
}, "sourceRootEmpty")
isAsync()
})
method(map.sourcesContent, mapUrl, wrap(Throws), function(error, result) {
t.error(error)
t.deepEqual(result, {
@@ -414,6 +505,24 @@ function testResolveSources(method, sync) {
isAsync()
})
method(map.noSources, mapUrl, wrap(identity), function(error, result) {
t.error(error)
t.deepEqual(result, {
sourcesResolved: [],
sourcesContent: []
}, "noSources")
isAsync()
})
method(map.empty, mapUrl, wrap(identity), function(error, result) {
t.error(error)
t.deepEqual(result, {
sourcesResolved: [],
sourcesContent: []
}, "empty")
isAsync()
})
method(map.simple, mapUrl, wrap(read(["non", "string"])), function(error, result) {
t.error(error)
t.deepEqual(result, {
@@ -423,12 +532,29 @@ function testResolveSources(method, sync) {
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)
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"
], "read throws .sourcesResolved")
var sourcesContent = result.sourcesContent
for (var index = 0, len = sourcesContent.length; index < len; index++) {
var item = sourcesContent[index]
if (item instanceof Error) {
sourcesContent[index] = null
}
}
t.deepEqual(sourcesContent, [
"foo.js",
null,
null,
"/version.js",
"//foo.org/baz.js"
], "read throws .sourcesContent")
isAsync()
})
@@ -473,7 +599,7 @@ function testResolve(method, sync) {
var codeUrl = "http://example.com/a/b/c/foo.js"
t.plan(1 + 18*3 + 7*4 + 4)
t.plan(1 + 15*3 + 21*4 + 4)
t.equal(typeof method, "function", "is a function")
@@ -598,18 +724,36 @@ function testResolve(method, sync) {
})
method(code.dataUriNoMime, codeUrl, wrap(Throws), function(error, result) {
t.deepEqual(error.sourceMapData, {
sourceMappingURL: "data:,foo",
url: null,
sourcesRelativeTo: codeUrl,
map: "foo"
}, "dataUriNoMime .sourceMapData")
t.ok(error.message.match(/mime type.+text\/plain/), "dataUriNoMime")
t.notOk(result)
isAsync()
})
method(code.dataUriInvalidMime, codeUrl, wrap(Throws), function(error, result) {
t.deepEqual(error.sourceMapData, {
sourceMappingURL: "data:text/html,foo",
url: null,
sourcesRelativeTo: codeUrl,
map: "foo"
}, "dataUriInvalidMime .sourceMapData")
t.ok(error.message.match(/mime type.+text\/html/), "dataUriInvalidMime")
t.notOk(result)
isAsync()
})
method(code.dataUriInvalidJSON, codeUrl, wrap(Throws), function(error, result) {
t.deepEqual(error.sourceMapData, {
sourceMappingURL: "data:application/json,foo",
url: null,
sourcesRelativeTo: codeUrl,
map: "foo"
}, "dataUriInvalidJSON .sourceMapData")
t.ok(error instanceof SyntaxError && error.message !== "data:application/json,foo",
"dataUriInvalidJSON")
t.notOk(result)
@@ -632,6 +776,12 @@ function testResolve(method, sync) {
})
method(code.dataUriEmpty, codeUrl, wrap(Throws), function(error, result) {
t.deepEqual(error.sourceMapData, {
sourceMappingURL: "data:",
url: null,
sourcesRelativeTo: codeUrl,
map: ""
}, "dataUriEmpty .sourceMapData")
t.ok(error.message.match(/mime type.+text\/plain/), "dataUriEmpty")
t.notOk(result)
isAsync()
@@ -657,6 +807,12 @@ function testResolve(method, sync) {
})
method(code.absolute, codeUrl, wrap(read("invalid JSON")), function(error, result) {
t.deepEqual(error.sourceMapData, {
sourceMappingURL: "https://foo.org/foo.js.map",
url: "https://foo.org/foo.js.map",
sourcesRelativeTo: "https://foo.org/foo.js.map",
map: "invalid JSON"
}, "read invalid JSON .sourceMapData")
t.ok(error instanceof SyntaxError, "read invalid JSON")
t.notOk(result)
isAsync()
@@ -676,6 +832,12 @@ function testResolve(method, sync) {
})
method(code.absolute, codeUrl, wrap(Throws), function(error, result) {
t.deepEqual(error.sourceMapData, {
sourceMappingURL: "https://foo.org/foo.js.map",
url: "https://foo.org/foo.js.map",
sourcesRelativeTo: "https://foo.org/foo.js.map",
map: null
}, "read throws .sourceMapData")
t.equal(error.message, "https://foo.org/foo.js.map", "read throws")
t.notOk(result)
isAsync()
@@ -713,7 +875,7 @@ function testResolve(method, sync) {
isAsync()
})
options = {ignoreSourceRoot: true}
options = {sourceRoot: false}
method(code.fileRelative, codeUrl, readMap(map.sourceRoot), options, function(error, result) {
t.error(error)
t.deepEqual(result.sourcesResolved, [
@@ -722,7 +884,7 @@ function testResolve(method, sync) {
"http://example.com/a/b/vendor/dom.js",
"http://example.com/version.js",
"http://foo.org/baz.js"
], "sourceRoot")
], "ignore sourceRoot")
t.deepEqual(result.sourcesContent, [
"http://example.com/a/b/c/foo.js",
"http://example.com/a/b/c/lib/bar.js",
@@ -733,6 +895,26 @@ function testResolve(method, sync) {
isAsync()
})
options = {sourceRoot: "/static/js/"}
method(code.fileRelative, codeUrl, readMap(map.sourceRoot), options, function(error, result) {
t.error(error)
t.deepEqual(result.sourcesResolved, [
"http://example.com/static/js/foo.js",
"http://example.com/static/js/lib/bar.js",
"http://example.com/static/vendor/dom.js",
"http://example.com/version.js",
"http://foo.org/baz.js"
], "custom sourceRoot")
t.deepEqual(result.sourcesContent, [
"http://example.com/static/js/foo.js",
"http://example.com/static/js/lib/bar.js",
"http://example.com/static/vendor/dom.js",
"http://example.com/version.js",
"http://foo.org/baz.js"
], "custom sourceRoot")
isAsync()
})
method(code.fileRelative, codeUrl, readMap(map.sourceRootNoSlash), function(error, result) {
t.error(error)
t.deepEqual(result.sourcesResolved, [
@@ -752,6 +934,25 @@ function testResolve(method, sync) {
isAsync()
})
method(code.fileRelative, codeUrl, readMap(map.sourceRootEmpty), 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"
], "sourceRootEmpty")
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"
], "sourceRootEmpty")
isAsync()
})
method(code.fileRelative, codeUrl, readMap(map.sourcesContent), function(error, result) {
t.error(error)
t.deepEqual(result.sourcesResolved, [
@@ -790,6 +991,20 @@ function testResolve(method, sync) {
isAsync()
})
method(code.fileRelative, codeUrl, readMap(map.noSources), function(error, result) {
t.error(error)
t.deepEqual(result.sourcesResolved, [], "noSources")
t.deepEqual(result.sourcesContent, [], "noSources")
isAsync()
})
method(code.fileRelative, codeUrl, readMap(map.empty), function(error, result) {
t.error(error)
t.deepEqual(result.sourcesResolved, [], "noSources")
t.deepEqual(result.sourcesContent, [], "noSources")
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")
@@ -801,15 +1016,138 @@ function testResolve(method, sync) {
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.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"
], "read throws .sourcesResolved")
var sourcesContent = result.sourcesContent
for (var index = 0, len = sourcesContent.length; index < len; index++) {
var item = sourcesContent[index]
if (item instanceof Error) {
sourcesContent[index] = null
}
}
t.deepEqual(sourcesContent, [
"foo.js",
null,
null,
"/version.js",
"//foo.org/baz.js"
], "read throws .sourcesContent")
isAsync()
})
var mapUrl = "https://foo.org/foo.js.map"
method(null, mapUrl, readSimple, function(error, result) {
t.error(error)
t.deepEqual(result, {
sourceMappingURL: null,
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"]
}, "mapUrl simple")
isAsync()
})
method(null, mapUrl, wrap(read([map.simpleString])), function(error, result) {
t.error(error)
t.deepEqual(result, {
sourceMappingURL: null,
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]
}, "mapUrl read non-string")
isAsync()
})
method(null, mapUrl, wrap(read("invalid JSON")), function(error, result) {
t.deepEqual(error.sourceMapData, {
sourceMappingURL: null,
url: "https://foo.org/foo.js.map",
sourcesRelativeTo: "https://foo.org/foo.js.map",
map: "invalid JSON"
}, "mapUrl read invalid JSON .sourceMapData")
t.ok(error instanceof SyntaxError, "mapUrl read invalid JSON")
t.notOk(result)
isAsync()
})
method(null, mapUrl, wrapMap(read(map.XSSIsafe), identity), function(error, result) {
t.error(error)
t.deepEqual(result, {
sourceMappingURL: null,
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"]
}, "mapUrl XSSIsafe map")
isAsync()
})
method(null, mapUrl, wrap(Throws), function(error, result) {
t.deepEqual(error.sourceMapData, {
sourceMappingURL: null,
url: "https://foo.org/foo.js.map",
sourcesRelativeTo: "https://foo.org/foo.js.map",
map: null
}, "mapUrl read throws .sourceMapData")
t.equal(error.message, "https://foo.org/foo.js.map", "mapUrl read throws")
t.notOk(result)
isAsync()
})
mapUrl = "http://example.com/a/b/c/foo.js.map"
options = {sourceRoot: "/static/js/"}
method(null, mapUrl, readMap(map.sourceRoot), options, function(error, result) {
t.error(error)
t.deepEqual(result.sourcesResolved, [
"http://example.com/static/js/foo.js",
"http://example.com/static/js/lib/bar.js",
"http://example.com/static/vendor/dom.js",
"http://example.com/version.js",
"http://foo.org/baz.js"
], "mapUrl custom sourceRoot")
t.deepEqual(result.sourcesContent, [
"http://example.com/static/js/foo.js",
"http://example.com/static/js/lib/bar.js",
"http://example.com/static/vendor/dom.js",
"http://example.com/version.js",
"http://foo.org/baz.js"
], "mapUrl custom sourceRoot")
isAsync()
})
method(null, mapUrl, 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"
], "mapUrl 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"
], "mapUrl mixed")
isAsync()
})
next = true
}
}
@@ -817,3 +1155,8 @@ function testResolve(method, sync) {
test(".resolve", testResolve(sourceMapResolve.resolve, false))
test(".resolveSync", testResolve(sourceMapResolve.resolveSync, true))
test(".parseMapToJSON", function(t) {
t.plan(1)
t.deepEqual(sourceMapResolve.parseMapToJSON(map.XSSIsafe), map.simple)
})
+14 -29
View File
@@ -1,6 +1,6 @@
{
name: "source-map-resolve",
version: "0.3.1",
version: "0.5.2",
author: "Simon Lydell",
license: "MIT",
description: "Resolve the source map and/or sources for a generated file.",
@@ -29,33 +29,18 @@
build: "node generate-source-map-resolve.js"
},
dependencies: {
"source-map-url": "~0.3.0",
"atob": "~1.1.0",
"urix": "~0.1.0",
// resolve-url is a dependency in package.json even though it is not
// needed in Node.js, to allow using npm as a package manager for
// browser projects too.
"resolve-url": "~0.2.1"
"atob": "^2.1.1",
"decode-uri-component": "^0.2.0",
"resolve-url": "^0.2.1",
"source-map-url": "^0.4.0",
"urix": "^0.1.0"
},
devDependencies: {
"tape": "~2.5.0",
"jshint": "~2.4.3",
"setimmediate": "~1.0.1",
"Base64": "~0.2.0",
"simple-asyncify": "~0.1.0"
},
testling: {
files: "test/source-map-resolve.js",
browsers: [
"ie/8..latest",
"chrome/latest",
"firefox/latest",
"opera/12",
"opera/latest",
"safari/5",
"iphone/6",
"android-browser/4"
]
"Base64": "1.0.1",
"jshint": "2.9.5",
"setimmediate": "1.0.5",
"simple-asyncify": "1.0.0",
"tape": "4.9.0"
}
},
component: {
@@ -65,7 +50,7 @@
"source-map-resolve.js"
],
dependencies: {
"lydell/source-map-url": "~0.3.0",
"lydell/source-map-url": "~0.4.0",
"lydell/resolve-url": "~0.2.1"
}
},
@@ -75,8 +60,8 @@
".*"
],
dependencies: {
"source-map-url": "~0.3.0",
"resolve-url": "~0.2.1"
"source-map-url": "^0.4.0",
"resolve-url": "^0.2.1"
}
}
}