소스 맵
여기에 설명된 소스 맵 형식을 생성하고 사용하는 라이브러리입니다 .
노드와 함께 사용
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(생성된 위치)
- SourceMapConsumer.prototype.generatedPositionFor(originalPosition)
- SourceMapConsumer.prototype.allGeneratedPositionsFor(originalPosition)
- SourceMapConsumer.prototype.hasContentsOfAllSources()
- SourceMapConsumer.prototype.sourceContentFor(source[, returnNullOnMissing])
- SourceMapConsumer.prototype.eachMapping(콜백, 컨텍스트, 순서)
- 소스맵 생성기
- 새로운 SourceMapGenerator([startOfSourceMap])
- SourceMapGenerator.fromSourceMap(sourceMapConsumer)
- SourceMapGenerator.prototype.addMapping(매핑)
- SourceMapGenerator.prototype.setSourceContent(sourceFile, sourceContent)
- SourceMapGenerator.prototype.applySourceMap(sourceMapConsumer[, sourceFile[, sourceMapPath]])
- SourceMapGenerator.prototype.toString()
- 소스노드
- 새로운 SourceNode([라인, 열, 소스[, 청크[, 이름]]])
- SourceNode.fromStringWithSourceMap(코드, sourceMapConsumer[, 상대 경로])
- SourceNode.prototype.add(청크)
- SourceNode.prototype.prepend(청크)
- SourceNode.prototype.setSourceContent(sourceFile, sourceContent)
- SourceNode.prototype.walk(fn)
- SourceNode.prototype.walkSourceContents(fn)
- SourceNode.prototype.join(9월)
- 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(옵션)
예를 들어 웹에서 node.js 외부를 사용하는 경우 SourceMapConsumer
로드할 URL을 알아야 하며 , s를 구성하기 전에 lib/mappings.wasm
호출하여 알려야 합니다 .initialize
SourceMapConsumer
옵션 객체에는 다음과 같은 속성이 있습니다:
"lib/mappings.wasm"
: 파일String
의 URL이 포함된 A입니다lib/mappings.wasm
.
1
2
3sourceMap.SourceMapConsumer.initialize({
"lib/mappings.wasm": "https://example.com/source-map/lib/mappings.wasm"
});
새로운 SourceMapConsumer(rawSourceMap)
유일한 매개변수는 원시 소스 맵입니다('d일 수 있는 문자열
JSON.parse
또는 객체). 사양에 따르면 소스 맵에는 다음과 같은 속성이 있습니다.
version
: 이 맵이 따르는 소스 맵 사양의 버전입니다.sources
: 원본 소스 파일에 대한 URL 배열입니다.names
: 개별 매핑에서 참조할 수 있는 식별자 배열입니다.sourceRoot
: 선택 사항입니다. 모든 소스가 상대적인 URL 루트입니다.sourcesContent
: 선택사항 원본 소스 파일의 콘텐츠 배열입니다.mappings
: 실제 매핑이 포함된 base64 VLQ 문자열입니다.file
: 선택 사항입니다. 이 소스 맵과 연관되어 생성된 파일 이름입니다.
생성된 소스 맵 소비자의 약속이 반환됩니다.
SourceMapConsumer
더 이상 사용되지 않으면 해당 메서드를 호출해야
합니다 destroy
.
1
2
3const consumer = await new sourceMap.SourceMapConsumer(rawSourceMapJsonData);
doStuffWith(consumer);
consumer.destroy();
또는 를 사용하여 SourceMapConsumer.with
호출하는 것을 기억할 필요가 없도록 할 수 있습니다 destroy
.
SourceMapConsumer.with
and SourceMapConsumer
에서 새 항목을 구성합니다
( 자세한 내용은 생성자를 참조하세요. 그런 다음 새로 구성된 소비자로 를 호출하고 완료될 때까지 기다린 후 소비자를 호출 하고 return 의 반환 값을 반환합니다.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(생성된 위치)
제공된 생성 소스의 라인 및 열 위치에 대한 원래 소스, 라인 및 열 정보를 반환합니다. 유일한 인수는 다음 속성을 가진 객체입니다.
line
: 생성된 소스의 줄 번호. 이 라이브러리의 줄 번호는 1부터 시작합니다(기본 소스 맵 사양은 0부터 시작하는 줄 번호를 사용합니다. 이 라이브러리가 번역을 처리합니다).column
: 생성된 소스의 열 번호입니다. 이 라이브러리의 열 번호는 0부터 시작합니다.bias
: 또는SourceMapConsumer.GREATEST_LOWER_BOUND
입니다SourceMapConsumer.LEAST_UPPER_BOUND
. 정확한 요소를 찾을 수 없는 경우 각각 검색 중인 요소보다 작거나 큰 가장 가까운 요소를 반환할지 여부를 지정합니다. 기본값은 입니다SourceMapConsumer.GREATEST_LOWER_BOUND
.
다음 속성을 가진 객체가 반환됩니다.
source
: 원본 소스 파일이거나, 이 정보를 사용할 수 없는 경우 null입니다.line
: 원본 소스의 줄 번호 또는 이 정보를 사용할 수 없는 경우 null입니다. 줄 번호는 1부터 시작합니다.column
: 원본 소스의 열 번호 또는 이 정보를 사용할 수 없는 경우 null입니다. 열 번호는 0부터 시작합니다.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
: 원본 소스의 열 번호로, 열 번호는 0부터 시작합니다.
다음 속성을 가진 객체가 반환됩니다.
line
: 생성된 소스의 라인 번호 또는 null 라인 번호는 1부터 시작합니다.column
: 생성된 소스의 열 번호 또는 null입니다. 열 번호는 0부터 시작합니다.
1
2
3consumer.generatedPositionFor({ source: "example.js", line: 2, column: 10 })
// { line: 1,
// column: 56 }
SourceMapConsumer.prototype.allGeneratedPositionsFor(originalPosition)
제공된 원본 소스, 라인 및 열에 대해 생성된 모든 라인 및 열 정보를 반환합니다. 열이 제공되지 않으면 검색 중인 라인이나 매핑이 있는 다음으로 가장 가까운 라인에 해당하는 모든 매핑을 반환합니다. 그렇지 않으면 다음을 반환합니다. 주어진 행과 우리가 검색 중인 열 또는 오프셋이 있는 다음으로 가장 가까운 열에 해당하는 모든 매핑입니다.
유일한 인수는 다음 속성을 가진 객체입니다:
source
: 원본 소스의 파일 이름입니다.line
: 원본 소스의 줄 번호로, 줄 번호는 1부터 시작합니다.column
: 선택사항입니다. 원본 소스의 열 번호입니다. 열 번호는 0부터 시작합니다.
그리고 각각 다음 속성을 가진 객체 배열이 반환됩니다.
line
: 생성된 소스의 라인 번호 또는 null 라인 번호는 1부터 시작합니다.column
: 생성된 소스의 열 번호 또는 null입니다. 열 번호는 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(source[, 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
: 선택 사항입니다. 는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
소스맵.
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, sourceContent)
원본 소스 파일의 소스 콘텐츠를 설정합니다.
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에 대한 경로의 dirname입니다. 상대인 경우 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
SourceNode는 생성된 JavaScript 소스 코드의 조각을 보간 및/또는 연결하는 동시에 해당 조각과 원본 소스 코드 사이에 연결된 행 및 열 정보를 유지하는 방법을 제공합니다. 이는 컴파일러가 출력하기 전에 사용할 수 있는 최종 중간 표현으로 유용합니다. 생성된 JS 및 소스 맵.
새로운 SourceNode([라인, 열, 소스[, 청크[, 이름]]])
line
: 이 소스 노드와 연결된 원래 줄 번호 또는 원래 줄과 연결되지 않은 경우 null입니다. 줄 번호는 1부터 시작합니다.column
: 이 소스 노드와 연결된 원래 열 번호 또는 원래 열과 연결되지 않은 경우 null입니다. 열 번호는 0부터 시작합니다.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[, 상대 경로])
생성된 코드와 SourceMapConsumer에서 SourceNode를 생성합니다.
code
:생성된 코드sourceMapConsumer
생성된 코드의 SourceMaprelativePath
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(sourceFile, sourceContent)
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(9월)
SourceNodes를 제외하고 유사 Array.prototype.join
하며 이 소스 노드의 각 하위 노드 사이에 구분 기호를 삽입합니다.
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] }