Исходная карта
Это библиотека для создания и использования описанного здесь формата исходной карты.
Использовать с узлом
1$ npm install source-map
Использование в сети
1
2
3
4
5
6<script src="https://unpkg.com/source-map@0.7.2/dist/source-map.js"></script>
<script>
sourceMap.SourceMapConsumer.initialize({
"lib/mappings.wasm": "https://unpkg.com/source-map@0.7.2/lib/mappings.wasm"
});
</script>
Содержание
- Примеры
- API
- ИсточникКартаПотребитель
- SourceMapConsumer.initialize (параметры)
- новый SourceMapConsumer (rawSourceMap)
- SourceMapConsumer.with
- SourceMapConsumer.prototype.destroy ()
- SourceMapConsumer.prototype.computeColumnSpans ()
- SourceMapConsumer.prototype.originalPositionFor (createdPosition)
- SourceMapConsumer.prototype.generatedPositionFor (originalPosition)
- SourceMapConsumer.prototype.allGeneratedPositionsFor (originalPosition)
- SourceMapConsumer.prototype.hasContentsOfAllSources ()
- SourceMapConsumer.prototype.sourceContentFor (источник [, returnNullOnMissing])
- SourceMapConsumer.prototype.eachMapping (обратный вызов, контекст, порядок)
- SourceMapGenerator
- новый SourceMapGenerator ([startOfSourceMap])
- SourceMapGenerator.fromSourceMap (sourceMapConsumer)
- SourceMapGenerator.prototype.addMapping (сопоставление)
- SourceMapGenerator.prototype.setSourceContent (исходный файл, исходный контент)
- [SourceMapGenerator.prototype.applySourceMap (sourceMapConsumer , sourceFile [, sourceMapPath]])
- SourceMapGenerator.prototype.toString ()
- SourceNode
- [new SourceNode([line , столбец, источник , фрагмент [, имя]]])
- SourceNode.fromStringWithSourceMap (код, sourceMapConsumer [, relativePath])
- SourceNode.prototype.add (чанк)
- SourceNode.prototype.prepend (чанк)
- SourceNode.prototype.setSourceContent (исходный файл, исходный контент)
- SourceNode.prototype.walk (fn)
- SourceNode.prototype.walkSourceContents (fn)
- SourceNode.prototype.join (sep)
- SourceNode.prototype.replaceRight (шаблон, замена)
- SourceNode.prototype.toString ()
- SourceNode.prototype.toStringWithSourceMap ([startOfSourceMap])
- ИсточникКартаПотребитель
Примеры
Consuming a source map
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37const rawSourceMap = {
version: 3,
file: 'min.js',
names: ['bar', 'baz', 'n'],
sources: ['one.js', 'two.js'],
sourceRoot: 'http://example.com/www/js/',
mappings: 'CAAC,IAAI,IAAM,SAAUA,GAClB,OAAOC,IAAID;CCDb,IAAI,IAAM,SAAUE,GAClB,OAAOA'
};
const whatever = await SourceMapConsumer.with(rawSourceMap, null, consumer => {
console.log(consumer.sources);
// [ 'http://example.com/www/js/one.js',
// 'http://example.com/www/js/two.js' ]
console.log(consumer.originalPositionFor({
line: 2,
column: 28
}));
// { source: 'http://example.com/www/js/two.js',
// line: 2,
// column: 10,
// name: 'n' }
console.log(consumer.generatedPositionFor({
source: 'http://example.com/www/js/two.js',
line: 2,
column: 10
}));
// { line: 2, column: 28 }
consumer.eachMapping(function (m) {
// ...
});
return computeWhatever();
});
Generating a source map
Подробное руководство:компиляция в JavaScript и отладка с помощью исходных карт
С SourceNode (API высокого уровня)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28function compile(ast) {
switch (ast.type) {
case 'BinaryExpression':
return new SourceNode(
ast.location.line,
ast.location.column,
ast.location.source,
[compile(ast.left), " + ", compile(ast.right)]
);
case 'Literal':
return new SourceNode(
ast.location.line,
ast.location.column,
ast.location.source,
String(ast.value)
);
// ...
default:
throw new Error("Bad AST");
}
}
var ast = parse("40 + 2", "add.js");
console.log(compile(ast).toStringWithSourceMap({
file: 'add.js'
}));
// { code: '40 + 2',
// map: [object SourceMapGenerator] }
С SourceMapGenerator (API низкого уровня)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19var map = new SourceMapGenerator({
file: "source-mapped.js"
});
map.addMapping({
generated: {
line: 10,
column: 35
},
source: "foo.js",
original: {
line: 33,
column: 2
},
name: "christopher"
});
console.log(map.toString());
// '{"version":3,"file":"source-mapped.js","sources":["foo.js"],"names":["christopher"],"mappings":";;;;;;;;;mCAgCEA"}'
API
Получите ссылку на модуль:
1
2
3
4
5
6
7
8// Node.js
var sourceMap = require('source-map');
// Browser builds
var sourceMap = window.sourceMap;
// Inside Firefox
const sourceMap = require("devtools/toolkit/sourcemap/source-map.js");
SourceMapConsumer
Экземпляр SourceMapConsumer
представляет собой проанализированную исходную карту, которую мы можем запросить для получения информации об исходных позициях файла, указав ему позицию файла в сгенерированном источнике.
SourceMapConsumer.initialize (параметры)
При использовании SourceMapConsumer
вне node.js, например, в Интернете, ему необходимо знать, с какого URL загружать lib/mappings.wasm
. Вы должны сообщить ему, вызвав initialize
прежде чем создавать какие-либо SourceMapConsumer
s.
Объект параметров имеет следующие свойства:
-
"lib/mappings.wasm"
:String
содержащая URL-адрес файлаlib/mappings.wasm
.
1
2
3sourceMap.SourceMapConsumer.initialize({
"lib/mappings.wasm": "https://example.com/source-map/lib/mappings.wasm"
});
новый SourceMapConsumer (rawSourceMap)
Единственный параметр - это исходная карта исходного кода (либо в виде строки, которая может быть JSON.parse
, либо в виде объекта). Согласно спецификации исходные карты имеют следующие атрибуты:
version
: какая версия спецификации исходной карты используется для этой карты.sources
: массив URL-адресов исходных исходных файлов.names
: массив идентификаторов, на которые могут ссылаться отдельные сопоставления.sourceRoot
: Необязательно. Корневой URL-адрес, от которого относятся все источники.sourcesContent
: Необязательно.Массив содержимого исходных файлов.mappings
: строка VLQ base64, которая содержит фактические сопоставления.file
: Необязательно. Созданное имя файла, с которым связана эта исходная карта.
Обещание потребителя построенной исходной карты возвращается.
Когда SourceMapConsumer
больше не будет использоваться, вы должны вызвать его метод destroy
.
1
2
3const consumer = await new sourceMap.SourceMapConsumer(rawSourceMapJsonData);
doStuffWith(consumer);
consumer.destroy();
В качестве альтернативы вы можете использовать SourceMapConsumer.with
чтобы не помнить о вызове destroy
.
SourceMapConsumer.with
Построить новый новый SourceMapConsumer
от rawSourceMap
и sourceMapUrl
(см SourceMapConsumer
конструктора Подробности Тогдашнего, вызывайте. async function f(SourceMapConsumer) -> T
с недавно построенным Потребителем, ждать f
для завершения вызова , destroy
на потребитель, и вернуться f
возвращаемое значение.
Вы не должны использовать потребителя после завершения f
!
Используя with
, вам не нужно помнить о ручном вызове destroy
для потребителя, поскольку он будет вызываться автоматически после завершения f
.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15const xSquared = await SourceMapConsumer.with(
myRawSourceMap,
null,
async function (consumer) {
// Use `consumer` inside here and don't worry about remembering
// to call `destroy`.
const x = await whatever(consumer);
return x * x;
}
);
// You may not use that `consumer` anymore out here; it has
// been destroyed. But you can use `xSquared`.
console.log(xSquared);
SourceMapConsumer.prototype.destroy ()
Освободите данные wasm, связанные с этим потребителем исходной карты, которые управляются вручную.
1consumer.destroy();
В качестве альтернативы вы можете использовать SourceMapConsumer.with
чтобы не помнить о вызове destroy
.
SourceMapConsumer.prototype.computeColumnSpans ()
Вычислить последний столбец для каждого сгенерированного сопоставления. Последний столбец является включительным.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22// Before:
consumer.allGeneratedPositionsFor({ line: 2, source: "foo.coffee" })
// [ { line: 2,
// column: 1 },
// { line: 2,
// column: 10 },
// { line: 2,
// column: 20 } ]
consumer.computeColumnSpans();
// After:
consumer.allGeneratedPositionsFor({ line: 2, source: "foo.coffee" })
// [ { line: 2,
// column: 1,
// lastColumn: 9 },
// { line: 2,
// column: 10,
// lastColumn: 19 },
// { line: 2,
// column: 20,
// lastColumn: Infinity } ]
SourceMapConsumer.prototype.originalPositionFor (createdPosition)
Возвращает исходную информацию об источнике, строке и столбце для предоставленных позиций строки и столбца сгенерированного источника. Единственным аргументом является объект со следующими свойствами:
line
: номер строки в сгенерированном источнике. Номера строк в этой библиотеке начинаются с 1 (обратите внимание, что в базовой спецификации карты источников используются номера строк с отсчетом от 0 - эта библиотека обрабатывает перевод).column
: номер столбца в созданном источнике. Номера столбцов в этой библиотеке отсчитываются от нуля.bias
: либоSourceMapConsumer.GREATEST_LOWER_BOUND
либоSourceMapConsumer.LEAST_UPPER_BOUND
. Указывает, следует ли возвращать ближайший элемент, который меньше или больше, чем тот, который мы ищем, соответственно, если не удается найти точный элемент. По умолчаниюSourceMapConsumer.GREATEST_LOWER_BOUND
.
и объект возвращается со следующими свойствами:
source
: исходный исходный файл или null, если эта информация недоступна.line
: номер строки в исходном источнике или null, если эта информация недоступна.Номер строки начинается с 1.column
: номер столбца в исходном источнике или null, если эта информация недоступна.Номер столбца отсчитывается от нуля.name
: исходный идентификатор или null, если эта информация недоступна.
1
2
3
4
5
6
7
8
9
10
11consumer.originalPositionFor({ line: 2, column: 10 })
// { source: 'foo.coffee',
// line: 2,
// column: 2,
// name: null }
consumer.originalPositionFor({ line: 99999999999999999, column: 999999999999999 })
// { source: null,
// line: null,
// column: null,
// name: null }
SourceMapConsumer.prototype.generatedPositionFor (originalPosition)
Возвращает сгенерированную информацию о строке и столбце для исходных позиций источника, строки и столбца. Единственным аргументом является объект со следующими свойствами:
source
: имя файла исходного источника.line
: номер строки в исходном тексте. Номер строки начинается с 1.column
: номер столбца в исходном источнике. Номер столбца отсчитывается от нуля.
и объект возвращается со следующими свойствами:
line
: номер строки в сгенерированном источнике или null.Номер строки начинается с 1.column
: номер столбца в сгенерированном источнике или ноль. Номер столбца отсчитывается от 0.
1
2
3consumer.generatedPositionFor({ source: "example.js", line: 2, column: 10 })
// { line: 1,
// column: 56 }
SourceMapConsumer.prototype.allGeneratedPositionsFor (originalPosition)
Возвращает всю сгенерированную информацию о строке и столбце для исходного источника, предоставленной строки и столбца. Если столбец не указан, возвращает все сопоставления, соответствующие либо строке, которую мы ищем, либо следующей ближайшей строке, которая имеет какие-либо сопоставления. В противном случае возвращает все сопоставления, соответствующие данной строке и либо столбцу, который мы ищем, либо следующему ближайшему столбцу, у которого есть какие-либо смещения.
Единственный аргумент - это объект со следующими свойствами:
source
: имя файла исходного источника.line
: номер строки в исходном тексте. Номер строки начинается с 1.column
: Необязательно. Номер столбца в исходном источнике. Номер столбца отсчитывается от нуля.
и возвращается массив объектов, каждый со следующими свойствами:
line
: номер строки в сгенерированном источнике или null.Номер строки начинается с 1.column
: номер столбца в сгенерированном источнике или ноль. Номер столбца отсчитывается от 0.
1
2
3
4
5
6
7consumer.allGeneratedpositionsfor({ line: 2, source: "foo.coffee" })
// [ { line: 2,
// column: 1 },
// { line: 2,
// column: 10 },
// { line: 2,
// column: 20 } ]
SourceMapConsumer.prototype.hasContentsOfAllSources ()
Верните true, если у нас есть встроенный исходный контент для каждого источника, указанного в исходной карте, иначе false.
Другими словами, если этот метод возвращает значение true
, то consumer.sourceContentFor(s)
будет успешным для каждого источника s
в consumer.sources
.
1
2
3
4
5
6
7// ...
if (consumer.hasContentsOfAllSources()) {
consumerReadyCallback(consumer);
} else {
fetchSources(consumer, consumerReadyCallback);
}
// ...
SourceMapConsumer.prototype.sourceContentFor (источник [, returnNullOnMissing])
Возвращает исходный исходный контент для предоставленного источника. Единственным аргументом является URL-адрес исходного исходного файла.
Если исходный контент для данного источника не найден, выдается ошибка. При желании можно передать true
в качестве второго параметра, чтобы вместо этого возвращалось значение null
.
1
2
3
4
5
6
7
8
9
10
11consumer.sources
// [ "my-cool-lib.clj" ]
consumer.sourceContentFor("my-cool-lib.clj")
// "..."
consumer.sourceContentFor("this is not in the source map");
// Error: "this is not in the source map" is not in the source map
consumer.sourceContentFor("this is not in the source map", true);
// null
SourceMapConsumer.prototype.eachMapping (обратный вызов, контекст, порядок)
Перебирайте каждое сопоставление между исходным источником / строкой / столбцом и созданной строкой / столбцом на этой исходной карте.
callback
: функция, которая вызывается при каждом сопоставлении. Сопоставления имеют форму{ source, generatedLine, generatedColumn, originalLine, originalColumn, name }
context
: Необязательно. Если указано, этот объект будет значениемthis
каждый раз, когда вызываетсяcallback
.order
: либоSourceMapConsumer.GENERATED_ORDER
либоSourceMapConsumer.ORIGINAL_ORDER
. Указывает, хотите ли вы перебирать сопоставления, отсортированные по порядку строк / столбцов сгенерированного файла или исходному / исходному / столбцовому порядку, соответственно. По умолчанию используетсяSourceMapConsumer.GENERATED_ORDER
.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15consumer.eachMapping(function (m) { console.log(m); })
// ...
// { source: 'illmatic.js',
// generatedLine: 1,
// generatedColumn: 0,
// originalLine: 1,
// originalColumn: 0,
// name: null }
// { source: 'illmatic.js',
// generatedLine: 2,
// generatedColumn: 0,
// originalLine: 2,
// originalColumn: 0,
// name: null }
// ...
SourceMapGenerator
Экземпляр SourceMapGenerator представляет исходную карту, которая строится постепенно.
новый SourceMapGenerator ([startOfSourceMap])
Вы можете передать объект со следующими свойствами:
file
: имя файла сгенерированного источника, с которым связана эта карта источников.sourceRoot
: корень для всех относительных URL-адресов в этой исходной карте.skipValidation
: Необязательно. ПриskipValidation
true
отключает проверку сопоставлений по мере их добавления. Это может повысить производительность, но следует использовать осторожно, в крайнем случае. Даже в этом случае следует избегать использования этого флага при запуске тестов, если это возможно.
1
2
3
4var generator = new sourceMap.SourceMapGenerator({
file: "my-generated-javascript-file.js",
sourceRoot: "http://example.com/app/js/"
});
SourceMapGenerator.fromSourceMap (sourceMapConsumer)
Создает новый SourceMapGenerator
из существующего экземпляра SourceMapConsumer
.
-
sourceMapConsumer
Файл SourceMap.
1var generator = sourceMap.SourceMapGenerator.fromSourceMap(consumer);
SourceMapGenerator.prototype.addMapping (сопоставление)
Добавьте одно сопоставление из исходной исходной строки и столбца в созданную исходную строку и столбец для этой создаваемой исходной карты. Объект сопоставления должен иметь следующие свойства:
generated
: объект с сгенерированными позициями строки и столбца.original
: объект с исходными положениями строки и столбца.source
: исходный исходный файл (относительно sourceRoot).name
: необязательное исходное имя токена для этого сопоставления.
1
2
3
4
5generator.addMapping({
source: "module-one.scm",
original: { line: 128, column: 0 },
generated: { line: 3, column: 456 }
})
SourceMapGenerator.prototype.setSourceContent (исходный файл, исходный контент)
Установите исходный контент для исходного исходного файла.
sourceFile
URL-адрес исходного исходного файла.sourceContent
содержимое исходного файла.
1
2generator.setSourceContent("module-one.scm",
fs.readFileSync("path/to/module-one.scm"))
SourceMapGenerator.prototype.applySourceMap (sourceMapConsumer [, sourceFile [, sourceMapPath]])
Применяет SourceMap для исходного файла к SourceMap. Каждое сопоставление с предоставленным исходным файлом перезаписывается с использованием предоставленного SourceMap. Примечание: разрешение для результирующих сопоставлений является минимумом для этой карты и предоставленной карты.
sourceMapConsumer
: применяемый SourceMap.sourceFile
: Необязательно. Имя исходного файла. Если не указано, будет использоваться файл sourceMapConsumer.file, если он существует. В противном случае будет выдана ошибка.sourceMapPath
: Необязательно. Имя каталога пути к SourceMap, который будет применяться. Если относительный, он относится к SourceMap.Этот параметр необходим, когда два SourceMap не находятся в одном каталоге, а SourceMap, который должен быть применен, содержит относительные исходные пути. Если да, то эти относительные исходные пути необходимо переписать относительно SourceMap.
Если он опущен, предполагается, что оба SourceMap находятся в одном каталоге, что не требует перезаписи (поставка
'.'
Имеет тот же эффект.)
SourceMapGenerator.prototype.toString ()
Отображает создаваемую исходную карту в строку.
1
2generator.toString()
// '{"version":3,"sources":["module-one.scm"],"names":[],"mappings":"...snip...","file":"my-generated-javascript-file.js","sourceRoot":"http://example.com/app/js/"}'
SourceNode
Узлы SourceNodes позволяют абстрагироваться от интерполяции и / или объединения фрагментов сгенерированного исходного кода JavaScript, сохраняя при этом информацию о строках и столбцах, связанных между этими фрагментами и исходным исходным кодом. Это полезно в качестве окончательного промежуточного представления, которое компилятор может использовать перед выводом. сгенерированный JS и исходная карта.
новый узел источника ([строка, столбец, источник [, фрагмент [, имя]]])
line
: исходный номер строки, связанный с этим исходным узлом, или null, если он не связан с исходной строкой. Номер строки начинается с 1.column
: исходный номер столбца, связанный с этим исходным узлом, или null, если он не связан с исходным столбцом. Номер столбца отсчитывается от нуля.source
: имя файла исходного источника; null, если имя файла не указано.chunk
: Необязательно. Немедленно передается вSourceNode.prototype.add
, см. ниже.name
: Необязательно. Исходный идентификатор.
1
2
3
4
5var node = new SourceNode(1, 2, "a.cpp", [
new SourceNode(3, 4, "b.cpp", "extern int status;\n"),
new SourceNode(5, 6, "c.cpp", "std::string* make_string(size_t n);\n"),
new SourceNode(7, 8, "d.cpp", "int main(int argc, char** argv) {}\n"),
]);
SourceNode.fromStringWithSourceMap (код, sourceMapConsumer [, relativePath])
Создает SourceNode из сгенерированного кода и SourceMapConsumer.
code
: сгенерированный кодsourceMapConsumer
SourceMap для сгенерированного кодаrelativePath
Необязательный путь, относительноsourceMapConsumer
должны быть относительные источники вsourceMapConsumer
.
1
2const consumer = await new SourceMapConsumer(fs.readFileSync("path/to/my-file.js.map", "utf8"));
const node = SourceNode.fromStringWithSourceMap(fs.readFileSync("path/to/my-file.js"), consumer);
SourceNode.prototype.add (чанк)
Добавьте кусок сгенерированного JS в этот исходный узел.
-
chunk
: фрагмент строки сгенерированного кода JS, другой экземплярSourceNode
или массив, где каждый член является одним из этих элементов.
1
2
3node.add(" + ");
node.add(otherNode);
node.add([leftHandOperandNode, " + ", rightHandOperandNode]);
SourceNode.prototype.prepend (чанк)
Добавьте кусок сгенерированного JS к этому исходному узлу.
-
chunk
: фрагмент строки сгенерированного JS-кода, другой экземплярSourceNode
или массив, каждый член которого является одним из этих элементов.
1node.prepend("/** Build Id: f783haef86324gf **/\n\n");
SourceNode.prototype.setSourceContent (исходный файл, исходный контент)
Установите исходный контент для исходного файла. Он будет добавлен в SourceMap
в поле sourcesContent
.
sourceFile
: имя исходного файла.sourceContent
: содержимое исходного файла.
1
2node.setSourceContent("module-one.scm",
fs.readFileSync("path/to/module-one.scm"))
SourceNode.prototype.walk (fn)
Обходите дерево фрагментов JS в этом узле и его дочерних элементах.Функция обхода вызывается один раз для каждого фрагмента JS и передается этому фрагменту и местоположению строки / столбца исходного связанного источника.
-
fn
: функция обхода.
1
2
3
4
5
6
7
8
9
10
11
12
13
14var node = new SourceNode(1, 2, "a.js", [
new SourceNode(3, 4, "b.js", "uno"),
"dos",
[
"tres",
new SourceNode(5, 6, "c.js", "quatro")
]
]);
node.walk(function (code, loc) { console.log("WALK:", code, loc); })
// WALK: uno { source: 'b.js', line: 3, column: 4, name: null }
// WALK: dos { source: 'a.js', line: 1, column: 2, name: null }
// WALK: tres { source: 'a.js', line: 1, column: 2, name: null }
// WALK: quatro { source: 'c.js', line: 5, column: 6, name: null }
SourceNode.prototype.walkSourceContents (fn)
Обходите дерево SourceNodes.Функция обхода вызывается для каждого содержимого исходного файла, и ей передается имя файла и исходное содержимое.
-
fn
: функция обхода.
1
2
3
4
5
6
7
8
9
10
11
12var a = new SourceNode(1, 2, "a.js", "generated from a");
a.setSourceContent("a.js", "original a");
var b = new SourceNode(1, 2, "b.js", "generated from b");
b.setSourceContent("b.js", "original b");
var c = new SourceNode(1, 2, "c.js", "generated from c");
c.setSourceContent("c.js", "original c");
var node = new SourceNode(null, null, null, [a, b, c]);
node.walkSourceContents(function (source, contents) { console.log("WALK:", source, ":", contents); })
// WALK: a.js : original a
// WALK: b.js : original b
// WALK: c.js : original c
SourceNode.prototype.join (sep)
Array.prototype.join
за исключением SourceNodes. Вставляет разделитель между каждым из дочерних узлов этого исходного узла.
-
sep
: разделитель.
1
2
3
4
5
6var lhs = new SourceNode(1, 2, "a.rs", "my_copy");
var operand = new SourceNode(3, 4, "a.rs", "=");
var rhs = new SourceNode(5, 6, "a.rs", "orig.clone()");
var node = new SourceNode(null, null, null, [ lhs, operand, rhs ]);
var joinedNode = node.join(" ");
SourceNode.prototype.replaceRight (шаблон, замена)
Вызовите String.prototype.replace
в самом правом фрагменте исходного кода. Полезно для удаления пробелов с конца исходного узла и т. Д.
pattern
: шаблон для замены.replacement
: вещь, на которую нужно заменить узор.
1
2// Trim trailing white space.
node.replaceRight(/\s*$/, "");
SourceNode.prototype.toString ()
Возвращает строковое представление этого исходного узла. Обходит дерево и объединяет все различные фрагменты в одну строку.
1
2
3
4
5
6
7
8
9
10
11var node = new SourceNode(1, 2, "a.js", [
new SourceNode(3, 4, "b.js", "uno"),
"dos",
[
"tres",
new SourceNode(5, 6, "c.js", "quatro")
]
]);
node.toString()
// 'unodostresquatro'
SourceNode.prototype.toStringWithSourceMap ([startOfSourceMap])
Возвращает строковое представление этого дерева исходных узлов, а также SourceMapGenerator, который содержит все сопоставления между сгенерированным и исходным источниками.
Аргументы те же, что и для new SourceMapGenerator
.
1
2
3
4
5
6
7
8
9
10
11
12var node = new SourceNode(1, 2, "a.js", [
new SourceNode(3, 4, "b.js", "uno"),
"dos",
[
"tres",
new SourceNode(5, 6, "c.js", "quatro")
]
]);
node.toStringWithSourceMap({ file: "my-output-file.js" })
// { code: 'unodostresquatro',
// map: [object SourceMapGenerator] }