Draft ECMA-426 / September 28, 2026 ソースマップ形式仕様
はじめに
この Ecma 標準は、トランスパイルされたソースコードを元のソース に対応付けるために使用するソースマップ形式を定義する。
ソースマップ形式には、次の目標がある。
双方向の対応付けを可能にする、ソースレベルのデバッグを支援する
サーバー側のスタックトレースの難読化解除を支援する
当初のソース マップ形式 (v1) は、最適化された JavaScript コードのソースレベルのデバッグを可能にするため、Closure Inspector で使用するものとして Joseph Schorr が作成した。ただし、形式自体は言語に依存しない。しかし、ソースマップを使用するプロジェクトの規模が拡大するにつれて、形式の冗長さが問題になり始めた。v2 形式(ソースマップ改訂第2版の提案 )は、単純さと柔軟性をある程度犠牲にして、ソースマップ全体のサイズを削減することで作成された。v2 形式で変更を加えた後も、ソースマップのファイルサイズがその有用性を制限していた。v3 形式は、Pavel Podivilov (Google) による提案に基づいている。
ソースマップ形式には、現在ではバージョン番号による区別はなく、常に「3」に固定されている。
2023~2024年には、多くの人々の多大な貢献により、ソースマップ形式がより厳密な Ecma 標準として整備された。ソースマップ形式の今後の改訂は、TC39-TG4 によって進められることが期待される。
Asumu Takikawa, Nicolò Ribaudo, Jon Kuperman
ECMA-426, 第1版 , プロジェクト編集者
1 適用範囲
この標準は、JavaScript、WebAssembly、および CSS にコンパイルされたコードのデバッグを改善するために、さまざまな種類の開発者ツールが使用するソースマップ形式を定義する。
2 適合性
適合するソースマップ文書とは、この仕様で詳述する構造に適合する JSON 文書である。
適合するソースマップ生成器は、適合するソースマップ文書であり、この仕様のアルゴリズムによって、任意と指定されたものも含めてエラーを一切報告せずに復号できる文書を生成することが望ましい。
適合するソースマップ利用器は、ソースマップ文書の取得(該当する場合)および復号について、この仕様で規定するアルゴリズムを実装することが望ましい。アルゴリズムが任意でエラーを報告してよいと仕様に示されている場合、適合する利用器は、エラーを無視しても、処理を終了せずに報告してもよい。
3 参照文献
次の文書は、その内容の一部または全部がこの文書の要件を構成する形で、本文中から参照されている。日付のある参照文献については、引用された版だけが適用される。日付のない参照文献については、追補を含む、その文書の最新版が適用される。
3.1 規範的参照文献
ECMA-262, ECMAScript® 言語仕様 。
https://tc39.es/ecma262/
ECMA-404, JSON データ交換形式 。
https://www.ecma-international.org/publications-and-standards/standards/ecma-404/
3.2 参考文献
IETF RFC 4648, Base16、Base32、および Base64 のデータ符号化 。
https://datatracker.ietf.org/doc/html/rfc4648
WebAssembly コア仕様 。
https://www.w3.org/TR/wasm-core-2/
WHATWG Encoding 。
https://encoding.spec.whatwg.org/
WHATWG Fetch 。
https://fetch.spec.whatwg.org/
WHATWG Infra 。
https://infra.spec.whatwg.org/
WHATWG URL 。
https://url.spec.whatwg.org/
4 表記規約
この仕様は、ECMA-262(表記規約) で定義された表記規約に、この節で定義する拡張を加えたものに従う。
4.1 アルゴリズムの規約
4.1.1 暗黙の完了
この仕様で宣言するすべての抽象操作は、そのアルゴリズムで宣言された返却型の値を含む正常完了、またはスロー完了を返すものと暗黙に見なす。例えば、次のように宣言された抽象操作は、
4.1.1.1 GetTheAnswer ( input )
The abstract operation GetTheAnswer takes argument input (an integer ) and returns an integer .
次と同等である。
4.1.1.2 GetTheAnswer2 ( input )
The abstract operation GetTheAnswer2 takes argument input (an integer ) and returns either a normal completion containing an integer or a throw completion .
完了レコードを返す抽象操作の呼び出しは、明示的な Completion 呼び出しで包まれていない限り、ECMA-262 の完了レコードを展開する略記 ? で包まれているものと暗黙に見なす。例えば、
result を GetTheAnswer (value ) とする.second を Completion (GetTheAnswer (value )) とする.
は、次と同等である。
result を ? GetTheAnswer (value ) とする.second を Completion (GetTheAnswer (value )) とする.
4.1.2 任意のエラー報告
アルゴリズムが任意でエラーを報告する ことになっている場合、実装は次のいずれかの動作を選択してよい。
アルゴリズムの残りの部分の実行を続ける。
例えばブラウザーのコンソールなどで、利用者にエラーを報告し、アルゴリズムの残りの部分の実行を続ける。
ThrowCompletion を返す。
実装は、任意のエラー報告ごとに異なる動作を選択できる。
4.2 文法の表記
この仕様は、ECMA-262(文法の表記) で定義された文法の表記規約に従う。ただし、次の点に注意する。
この仕様で定義する文法の終端記号は、個々の符号位置である。これは ECMA-262 の字句文法 に類似しており、ECMA-262 の構文文法 には類似しない。
この仕様では、文法定義の複雑さを抑えるため、文法パラメーター および先読み制約 を使用しない。
5 用語および定義
この文書では、次の用語および定義を適用する。
生成コード
コンパイラーまたはトランスパイラーによって生成されたコード。
元のソース
コンパイラーまたはトランスパイラーを通していないソースコード。
ソースマップ URL
生成コード からソースマップの所在を参照する URL 。
列
生成コード の行内における、0を起点とするオフセット。JavaScript および CSS のソースマップでは UTF-16 符号単位で計算し、WebAssembly のソースマップでは、単一の行として表されるバイナリー内容内のバイト索引で計算する。
Note つまり、「A」(LATIN CAPITAL LETTER A) は1符号単位、「🔥」(FIRE) は2符号単位として数える。他の内容型のソースマップでは、これと異なってもよい。
6 base64 VLQ
base64 VLQ は、base64 で符号化した可変長数量 である。最上位ビット(第6ビット)を継続ビットとして使用し、「桁」は下位の桁から順に文字列 へ符号化する。また、最初の桁の最下位ビットを符号ビットとして使用する。
Note 1 base64 VLQ 符号化で表現できる値は、より大きな値の用途が示されるまでは、32ビットの数量に制限される。つまり、32ビットを超える値は無効であり、実装はそれらを拒否してよい。この制限には符号ビットを含めるが、継続ビットは含めない。
Note 2
文字
列 "iB" は、2桁の base64 VLQ を表す。最初の桁
"i" はビットパターン
0b100010 を符号化しており、継続ビットは
1(VLQ が続く)、符号ビットは
0(非負)、値のビットは
0b0001 である。2桁目の
B はビットパターン
0b000001 を符号化しており、継続ビットは
0、符号ビットはなく、値のビットは
0b00001 である。この VLQ 文字
列 を復号すると、数値17になる。
Note 3
文字
列 "V" は、1桁の base64 VLQ を表す。桁
"V" はビットパターン
0b010101 を符号化しており、継続ビットは
0(継続しない)、符号ビットは
1(負)、値のビットは
0b1010 である。この VLQ 文字
列 を復号すると、数値-10になる。
base64 VLQ は、次の字句文法に従う。
Vlq ::
VlqDigitList
VlqDigitList ::
TerminalDigit
ContinuationDigit
VlqDigitList
TerminalDigit ::
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
a
b
c
d
e
f
ContinuationDigit ::
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
0
1
2
3
4
5
6
7
8
9
+
/
6.1 VLQSignedValue
The syntax-directed operation VLQSignedValue takes no arguments and returns an integer . It is defined piecewise over the following productions:
Vlq :: VlqDigitList
unsigned を VlqDigitList の VLQUnsignedValue とする.unsigned modulo 2 = 1 ならば、sign を -1 とする.そうでなければ、sign を 1 とする. value を floor (unsigned / 2) とする.value が 0 であり、sign が -1 ならば、-231 を返す.value ≥ 231 ならば、エラーをスローする.sign × value を返す.
Note
6.2 VLQUnsignedValue
The syntax-directed operation VLQUnsignedValue takes no arguments and returns an non-negative integer . It is defined piecewise over the following productions:
Vlq :: VlqDigitList
value を VlqDigitList の VLQUnsignedValue とする.value ≥ 232 ならば、エラーをスローする.value を返す.
VlqDigitList ::
ContinuationDigit
VlqDigitList
left を ContinuationDigit の VLQUnsignedValue とする.right を VlqDigitList の VLQUnsignedValue とする.left + right × 25 を返す.
TerminalDigit ::
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
a
b
c
d
e
f
digit を、この生成規則に一致する文字とする.value を、IETF RFC 4648 で定義された base64 符号化に従って digit に対応する整数とする.表明: value < 32. value を返す.
ContinuationDigit ::
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
0
1
2
3
4
5
6
7
8
9
+
/
digit を、この生成規則に一致する文字とする.value を、IETF RFC 4648 で定義された base64 符号化に従って digit に対応する整数とする.表明: 32 ≤ value < 64. value - 32 を返す.
7 JSON 値の補助操作
この仕様のアルゴリズムは ECMA-262 の内部機構に基づいて定義されているが、JavaScript 以外のプラットフォームでも容易に実装できることを意図している。この節には、JSON 値を扱うための補助操作をまとめ、文書の残りの部分から ECMA-262 の詳細を抽象化する。
JSON value は、JSON object 、JSON array 、String 、Number 、Boolean 、または null のいずれかである。
JSON object は、その各プロパティーが次を満たす Object である。
JSON array は、次を満たす JSON object である。
キーが "length" 、値が Number であるプロパティーを持つ。
他のすべてのプロパティーのキーは整数索引である。
7.1 ParseJSON ( string )
The abstract operation ParseJSON takes argument string (a String) and returns a JSON value . It performs the following steps when called:
result を Call (%JSON.parse% , null , « string ») とする.表明: result は JSON value である. result を返す.
Editor's Note
この抽象操作は、
tc39/ecma262#3540 において、ECMA-262 自体から利用できるようにする作業が進められている。
7.2 JSONObjectGet ( object , key )
The abstract operation JSONObjectGet takes arguments object (a JSON object ) and key (a String) and returns a JSON value or missing . object 内の、指定された key に関連付けられた値を返す。 It performs the following steps when called:
object がキー key を持つ自身のプロパティーを持たないならば、missing を返す.prop を、キーが key である object の自身のプロパティーとする.prop の [[Value]] 属性を返す.
7.3 JSONArrayIterate ( array )
The abstract operation JSONArrayIterate takes argument array (a JSON array ) and returns a List of JSON values . array のすべての要素を含む List を返す。これにより、アルゴリズムで「各要素について」の反復処理を使用できる。 It performs the following steps when called:
length を JSONObjectGet (array , "length" ) とする.表明: length は非負の整数値を持つ Number である. list を新しい空の List とする.i を 0 とする.i < ℝ (length ) である間、次を繰り返す:value を JSONObjectGet (array , ToString (𝔽 (i ))) とする.表明: value は missing でない. value を list に追加する.i を i + 1 に設定する.list を返す.
7.4 StringSplit ( string , separators )
The abstract operation StringSplit takes arguments string (a String) and separators (a List of non-empty Strings) and returns a List of Strings. separators のいずれかの要素を区切りとして、文字列 を部分文字列 に分割する。複数の区切り文字列 が一致する場合、separators 内で先に現れるものほど優先順位が高い。 It performs the following steps when called:
parts を新しい空の List とする.strLen を string の長さとする.lastStart を 0 とする.i を 0 とする.i < strLen である間、次を繰り返す:matched を false とする.separators の各 String sep について、次を行う:sepLen を sep の長さとする.candidate を string の i から min (i + sepLen , strLen ) までの部分文字列 とする.candidate = sep であり、matched が false ならば:chunk を string の lastStart から i までの部分文字列 とする.chunk を parts に追加する.lastStart を i + sepLen に設定する.i を i + sepLen に設定する.matched を true に設定する.matched が false ならば、i を i + 1 に設定する.chunk を string の lastStart から strLen までの部分文字列 とする.chunk を parts に追加する.parts を返す.
8 位置の型
8.1 Position Record
Position Record は、非負の行番号と非負の列 番号からなる組である。
Table 1: Position Record のフィールド
フィールド名
値の型
[[Line]]
非負の整数値を持つ Number
[[Column]]
非負の整数値を持つ Number
8.2 Original Position Record
Original Position Record は、Decoded Source Record 、非負の行番号、および非負の列 番号からなる組である。Position Record に類似するが、具体的な元のソース ファイル内のソース位置を記述する。
Table 2: Original Position Record のフィールド
8.3 ComparePositions ( first , second )
The abstract operation ComparePositions takes arguments first (a Position Record or a Original Position Record ) and second (a Position Record or a Original Position Record ) and returns lesser , equal or greater . first が second より前にある場合、等しい場合、後にある場合に、それぞれ lesser 、equal 、greater を返す。Original Position Record の [[Source]] フィールドは無視する。 It performs the following steps when called:
first .[[Line]] < second .[[Line]] ならば、lesser を返す.first .[[Line]] > second .[[Line]] ならば、greater を返す.表明: first .[[Line]] は second .[[Line]] に等しい. first .[[Column]] < second .[[Column]] ならば、lesser を返す.first .[[Column]] > second .[[Column]] ならば、greater を返す.equal を返す.
9 ソースマップ形式
ソースマップは、次の構造を持つ最上位の JSON オブジェクトを含む JSON 文書である。
{
"version" : 3 ,
"file" : "out.js" ,
"sourceRoot" : "" ,
"sources" : [ "foo.js" , "bar.js" ] ,
"sourcesContent" : [ null , null ] ,
"names" : [ "src" , "maps" , "are" , "fun" ] ,
"mappings" : "A,AAAB;;ABCDE" ,
"ignoreList" : [ 0 ]
}
version フィールド は、常に整数としての数値3でなければならない。このフィールドが他の値を持つ場合、ソースマップを拒否してよい。
file フィールド は、このソースマップに関連付けられた生成コード の名前を指定する任意のフィールドである。これが URL 、相対パス名、または単なるベース名のいずれであるかは規定しない。ソースマップ生成器は、使用状況に適した解釈を選択してよい。
sourceRoot フィールド は、サーバー上のソースファイルの配置変更や、sources のエントリーに含まれる重複値の除去に使用する、任意のソースルート文字列 である。この値は、sources フィールド の各エントリーの先頭に付加される。
sources フィールド は、mappings フィールド が使用する元のソース のリストである。各エントリーは、相対 URL である可能性もある URL を表す文字列 、またはソース名が不明な場合の null のいずれかである。
sourcesContent フィールド は、ソースをホストできない場合に使用する、ソース内容(すなわち元のソース )の文字列 からなる任意のリストである。内容は、sources フィールド と同じ順序で列 挙する。一部の元のソース を名前によって取得すべき場合、そのエントリーは null であってもよい。
names フィールド は、mappings フィールド が使用してよいシンボル名の任意のリストである。
mappings フィールド は、符号化された対応付けデータを含む文字列 である(9.2 節を参照)。
ignoreList フィールド は、フレームワークのコードやバンドラーによる生成コード など、第三者のコードと見なすことが望ましいファイルの索引からなる任意のリストである。これにより、開発者が事前に設定しなくても、開発者が表示したりステップ実行したりすることを望まないと思われるコードを、開発者ツールで避けられる。このフィールドは sources フィールド を参照し、ソースマップ内の既知の第三者ソースすべての索引を列 挙する。一部のブラウザーは、ignoreList が存在しない場合、非推奨の x_google_ignoreList フィールドも使用することがある。
9.1 ソースマップの復号
Decoded Source Map Record は、次のフィールドを持つ。
Table 3: Decoded Source Map Record のフィールド
Decoded Source Record は、次のフィールドを持つ。
Table 4: Decoded Source Record のフィールド
フィールド名
値の型
[[URL]]
URL または null
[[Content]]
String または null
[[Ignored]]
Boolean
9.1.1 ParseSourceMap ( string , baseURL )
The abstract operation ParseSourceMap takes arguments string (a String) and baseURL (an URL ) and returns a Decoded Source Map Record . It performs the following steps when called:
json を ParseJSON (string ) とする.json が JSON object でないならば、エラーをスローする.JSONObjectGet (json , "sections" ) が missing でないならば:DecodeIndexSourceMap (json , baseURL ) を返す.DecodeSourceMap (json , baseURL ) を返す.
9.1.2 DecodeSourceMap ( json , baseURL )
The abstract operation DecodeSourceMap takes arguments json (a JSON object ) and baseURL (an URL ) and returns a Decoded Source Map Record . It performs the following steps when called:
JSONObjectGet (json , "version" ) が 3 𝔽 でないならば、任意でエラーを報告する .mappingsField を JSONObjectGet (json , "mappings" ) とする.mappingsField が String でないならば、エラーをスローする.JSONObjectGet (json , "sources" ) が JSON array でないならば、エラーをスローする.fileField を GetOptionalString (json , "file" ) とする.sourceRootField を GetOptionalString (json , "sourceRoot" ) とする.sourcesField を GetOptionalListOfOptionalStrings (json , "sources" ) とする.sourcesContentField を GetOptionalListOfOptionalStrings (json , "sourcesContent" ) とする.ignoreListField を GetOptionalListOfArrayIndexes (json , "ignoreList" ) とする.sources を DecodeSourceMapSources (baseURL , sourceRootField , sourcesField , sourcesContentField , ignoreListField ) とする.namesField を GetOptionalListOfStrings (json , "names" ) とする.mappings を DecodeMappings (mappingsField , namesField , sources ) とする.mappings を昇順に並べ替える。このとき、 ComparePositions (a .[[GeneratedPosition]] , b .[[GeneratedPosition]] ) が lesser である場合、Decoded Mapping Record a は Decoded Mapping Record b より小さいものとする.Decoded Source Map Record { [[File]] : fileField , [[Sources]] : sources , [[Mappings]] : mappings } を返す.
9.1.2.1 GetOptionalString ( object , key )
The abstract operation GetOptionalString takes arguments object (a JSON object ) and key (a String) and returns a String or null . It performs the following steps when called:
value を JSONObjectGet (object , key ) とする.value が String ならば、value を返す.value が missing でないならば、任意でエラーを報告する .null を返す.
9.1.2.2 GetOptionalListOfStrings ( object , key )
The abstract operation GetOptionalListOfStrings takes arguments object (a JSON object ) and key (a String) and returns a List of Strings. It performs the following steps when called:
list を新しい空の List とする.values を JSONObjectGet (object , key ) とする.values が missing ならば、list を返す.values が JSON array でないならば:任意でエラーを報告する .list を返す.JSONArrayIterate (values ) の各要素 item について、次を行う:item が String ならば:item を list に追加する.そうでなければ:任意でエラーを報告する .空の String を list に追加する. list を返す.
9.1.2.3 GetOptionalListOfOptionalStrings ( object , key )
The abstract operation GetOptionalListOfOptionalStrings takes arguments object (a JSON object ) and key (a String) and returns a List of either Strings or null . It performs the following steps when called:
list を新しい空の List とする.values を JSONObjectGet (object , key ) とする.values が missing ならば、list を返す.values が JSON array でないならば:任意でエラーを報告する .list を返す.JSONArrayIterate (values ) の各要素 item について、次を行う:item が String ならば:item を list に追加する.そうでなければ:item ≠ null ならば、任意でエラーを報告する .null を list に追加する. list を返す.
9.1.2.4 GetOptionalListOfArrayIndexes ( object , key )
The abstract operation GetOptionalListOfArrayIndexes takes arguments object (an Object) and key (a String) and returns a List of non-negative integers . It performs the following steps when called:
list を新しい空の List とする.values を JSONObjectGet (object , key ) とする.values が missing ならば、list を返す.values が JSON array でないならば:任意でエラーを報告する .list を返す.JSONArrayIterate (values ) の各要素 item について、次を行う:item が整数値を持つ Number であり、item ≥ +0 𝔽 ならば:ℝ (item ) を list に追加する.そうでなければ:任意でエラーを報告する . list を返す.
9.2 対応付けの構造
mappings フィールド のデータは、次のように分解される。
生成ファイルの1行を表す各グループは、セミコロン (;) で区切る。
各セグメントは、コンマ (,) で区切る。
各セグメントは、1個、4個、または5個の可変長フィールドで構成される。
各セグメントのフィールドは、次のとおりである。
セグメントが表す生成コード の行内における、0を起点とする開始列 。最初のセグメントの最初のフィールドである場合、または生成コード の新しい行 (;) に続く最初のセグメントである場合、このフィールドは値全体を base64 VLQ として保持する。それ以外の場合、このフィールドは、このフィールドの直前の出現に対する相対値を base64 VLQ として含む。生成コード の各行の後で前の値がリセットされるため、後述する他のフィールドとは異なることに注意する。
存在する場合、sources リスト内の、0を起点とする索引。このフィールドは、このフィールドの直前の出現に対する相対値を base64 VLQ として含む。ただし、このフィールドが初めて出現する場合は、値全体を表す。
存在する場合、元のソース 内の、0を起点とする開始行。このフィールドは、このフィールドの直前の出現に対する相対値を base64 VLQ として含む。ただし、このフィールドが初めて出現する場合は、値全体を表す。ソースのフィールドがある場合、存在しなければならない。
存在する場合、元のソース の行内における、0を起点とする開始列 。このフィールドは、このフィールドの直前の出現に対する相対値を base64 VLQ として含む。ただし、このフィールドが初めて出現する場合は、値全体を表す。ソースのフィールドがある場合、存在しなければならない。
存在する場合、このセグメントに関連付けられた names リスト内の、0を起点とする索引。このフィールドは、このフィールドの直前の出現に対する相対値を base64 VLQ として含む。ただし、このフィールドが初めて出現する場合は、値全体を表す。
Note 1 この符号化の目的は、ソースマップのサイズを削減することである。Google Calendar を使用して実施したテストでは、VLQ 符号化により、
ソースマップ改訂第2版の提案 と比較してソースマップのサイズが50%削減された。
Note 2 フィールドが1個のセグメントは、コンパイラーが生成したコードなど、対応する
元のソース コードがないために対応付けられていない
生成コード を表すことを意図している。フィールドが4個のセグメントは、対応する名前が存在しない、対応付けられたコードを表す。フィールドが5個のセグメントは、対応付けられた名前も持つ、対応付けられたコードを表す。
Note 3 ファイル オフセットの使用も検討されたが、プラットフォーム固有の行末表現によって
元のソース との位置がずれることを避けるため、行・
列 のデータを使用する方式が採用された。
Decoded Mapping Record は、次のフィールドを持つ。
Table 5: Decoded Mapping Record のフィールド
9.2.1 対応付けの文法
mappings の String は、次の文法に従わなければならない。
MappingsField :
LineList
LineList :
Line
Line
;
LineList
Line :
MappingList opt
MappingList :
Mapping
Mapping
,
MappingList
Mapping :
GeneratedColumn
GeneratedColumn
OriginalSource
OriginalLine
OriginalColumn
Name opt
GeneratedColumn :
Vlq
OriginalSource :
Vlq
OriginalLine :
Vlq
OriginalColumn :
Vlq
Name :
Vlq
Decode Mapping State Record は、次のフィールドを持つ。
Table 6: Decode Mapping State Record のフィールド
フィールド名
値の型
[[GeneratedLine]]
非負の整数
[[GeneratedColumn]]
非負の整数
[[SourceIndex]]
非負の整数
[[OriginalLine]]
非負の整数
[[OriginalColumn]]
非負の整数
[[NameIndex]]
非負の整数
9.2.1.1 DecodeMappingsField
The syntax-directed operation DecodeMappingsField takes arguments state (a Decode Mapping State Record ), mappings (a List of Decoded Mapping Records ), names (a List of Strings), and sources (a List of Decoded Source Records ). It is defined piecewise over the following productions:
LineList :
Line
;
LineList
Line の DecodeMappingsField を、引数 state , mappings , names および sources で実行する.state .[[GeneratedLine]] を state .[[GeneratedLine]] + 1 に設定する.state .[[GeneratedColumn]] を 0 に設定する.LineList の DecodeMappingsField を、引数 state , mappings , names および sources で実行する.
Line : [empty]
戻る.
MappingList :
Mapping
,
MappingList
Mapping の DecodeMappingsField を、引数 state , mappings , names および sources で実行する.MappingList の DecodeMappingsField を、引数 state , mappings , names および sources で実行する.
Mapping :
GeneratedColumn
GeneratedColumn の DecodeMappingsField を、引数 state , mappings , names および sources で実行する.state .[[GeneratedColumn]] < 0 ならば:任意でエラーを報告する .戻る. position を新しい Position Record { [[Line]] : state .[[GeneratedLine]] , [[Column]] : state .[[GeneratedColumn]] } とする.decodedMapping を新しい DecodedMappingRecord { [[GeneratedPosition]] : position , [[OriginalPosition]] : null , [[Name]] : null } とする.decodedMapping を mappings に追加する.
Mapping :
GeneratedColumn
OriginalSource
OriginalLine
OriginalColumn
Name opt
GeneratedColumn の DecodeMappingsField を、引数 state , mappings , names および sources で実行する.state .[[GeneratedColumn]] < 0 ならば:任意でエラーを報告する .戻る. generatedPosition を新しい Position Record { [[Line]] : state .[[GeneratedLine]] , [[Column]] : state .[[GeneratedColumn]] } とする.OriginalSource の DecodeMappingsField を、引数 state , mappings , names および sources で実行する.OriginalLine の DecodeMappingsField を、引数 state , mappings , names および sources で実行する.OriginalColumn の DecodeMappingsField を、引数 state , mappings , names および sources で実行する.state .[[SourceIndex]] < 0 または state .[[SourceIndex]] ≥ sources の要素数 または state .[[OriginalLine]] < 0 または state .[[OriginalColumn]] < 0 ならば:任意でエラーを報告する .originalPosition を null とする.そうでなければ:originalPosition を新しい Original Position Record { [[Source]] : sources [state .[[SourceIndex]] ], [[Line]] : state .[[OriginalLine]] , [[Column]] : state .[[OriginalColumn]] } とする. name を null とする.Name が存在するならば:Name の DecodeMappingsField を、引数 state , mappings , names および sources で実行する.state .[[NameIndex]] < 0 または state .[[NameIndex]] ≥ names の要素数ならば、任意でエラーを報告する .そうでなければ、name を names [state .[[NameIndex]] ] に設定する. decodedMapping を新しい DecodedMappingRecord { [[GeneratedPosition]] : generatedPosition , [[OriginalPosition]] : originalPosition , [[Name]] : name } とする.decodedMapping を mappings に追加する.
GeneratedColumn :
Vlq
relativeColumn を Vlq の VLQSignedValue とする.state .[[GeneratedColumn]] を state .[[GeneratedColumn]] + relativeColumn に設定する.
OriginalSource :
Vlq
relativeSourceIndex を Vlq の VLQSignedValue とする.state .[[SourceIndex]] を state .[[SourceIndex]] + relativeSourceIndex に設定する.
OriginalLine :
Vlq
relativeLine を Vlq の VLQSignedValue とする.state .[[OriginalLine]] を state .[[OriginalLine]] + relativeLine に設定する.
OriginalColumn :
Vlq
relativeColumn を Vlq の VLQSignedValue とする.state .[[OriginalColumn]] を state .[[OriginalColumn]] + relativeColumn に設定する.
Name :
Vlq
relativeName を Vlq の VLQSignedValue とする.state .[[NameIndex]] を state .[[NameIndex]] + relativeName に設定する.
9.2.2 DecodeMappings ( rawMappings , names , sources )
The abstract operation DecodeMappings takes arguments rawMappings (a String), names (a List of Strings), and sources (a List of Decoded Source Records ) and returns a List of Decoded Mapping Record . It performs the following steps when called:
mappings を新しい空の List とする.mappingsNode を、MappingsField を開始記号として rawMappings を構文解析したときのルート Parse Node とする.構文解析に失敗したならば:任意でエラーを報告する .mappings を返す. state を、すべてのフィールドを 0 に設定した新しい Decode Mapping State Record とする.mappingsNode の DecodeMappingsField を、引数 state , mappings , names および sources で実行する.mappings を返す.
9.2.3 生成された JavaScript コードの対応付け
対応付け のエントリーを持ってよい生成コード の位置は、ECMAScript 字句文法 に従い、入力要素 を用いて定義する。対応付けのエントリーは、次のいずれかを指さなければならない。
9.2.4 生成された JavaScript コードの名前
ソースマップ生成器は、次の条件を満たす場合、JavaScript トークンに対して [[Name]] フィールドを持つ対応付け のエントリーを作成することが望ましい。
元のソース 言語の構成要素が、生成された JavaScript コードと意味的に対応する。
元のソース 言語の構成要素が名前を持つ。
この場合、対応付け のエントリーの [[Name]] は、元のソース 言語の構成要素の名前であることが望ましい。[[Name]] が null でない対応付け を、名前付き対応付け と呼ぶ。
Note 1
関数や変数の名前を変更したり、即時実行関数式から関数名を除去したりするコード圧縮器が、その例である。
次の列 挙では、ECMAScript 構文文法 の生成規則と、それぞれについてソースマップ生成器が名前付き対応付けを出力することが望ましい、生成規則の右辺にあるトークンまたは非終端記号を示す。そのようなトークンに対して作成される対応付け のエントリーは、9.2.3 節に従わなければならない。
この列 挙は「最低限」のものとして理解することが望ましい。一般に、ソースマップ生成器は、追加の名前付き対応付けを自由に出力できる。
Note 2
この
列 挙には、生成器が名前付き対応付けを出力することが「望ましい」トークンに加えて、出力して「よい」トークンも含まれる。これは、既存のツールが名前付き対応付けを出力したり、その存在を期待したりしている実情を反映している。名前付き対応付けを重複させるコストは比較的小さい。names 内の索引は互いに相対的に符号化されるため、同じ名前への後続の対応付けは 0 (
A) として符号化される。
9.3 ソースの解決
sourceRoot を先頭に付加した後の sources が絶対 URL でない場合、sources はソースマップに対する相対 URL として解決される。これは、HTML 文書内のスクリプトの src 属性を解決する場合に類似する。
9.3.1 DecodeSourceMapSources ( baseURL , sourceRoot , sources , sourcesContent , ignoreList )
The abstract operation DecodeSourceMapSources takes arguments baseURL (an URL ), sourceRoot (a String or null ), sources (a List of either Strings or null ), sourcesContent (a List of either Strings or null ), and ignoreList (a List of non-negative integers ) and returns a List of Decoded Source Record . It performs the following steps when called:
decodedSources を新しい空の List とする.sourcesContentCount を sourcesContent の要素数とする.sourceUrlPrefix を空の String とする.sourceRoot ≠ null ならば:sourceRoot が符号位置 U+002F (SOLIDUS) で終わるならば:sourceUrlPrefix を sourceRoot に設定する.そうでなければ:sourceUrlPrefix を sourceRoot と "/" の文字列 連結に設定する. index を 0 とする.index < sources の長さである間、次を繰り返す:source を sources [index ] とする.decodedSource を Decoded Source Record { [[URL]] : null , [[Content]] : null , [[Ignored]] : false } とする.source ≠ null ならば:source を sourceUrlPrefix と source の文字列 連結に設定する.sourceURL を、baseURL を使用して source を URL 構文解析 した結果とする.sourceURL が failure ならば、任意でエラーを報告する .そうでなければ、decodedSource .[[URL]] を sourceURL に設定する. ignoreList が index を含むならば、decodedSource .[[Ignored]] を true に設定する.sourcesContentCount > index ならば、decodedSource .[[Content]] を sourcesContent [index ] に設定する.decodedSource を decodedSources に追加する.index を index + 1 に設定する.decodedSources を返す.
Note ソース内容の表示に対応しているが、同じ
URL で内容の異なる複数のソースの表示には対応していない実装は、指定された
URL に対応する複数の内容から、いずれか1つを任意に選択する。
9.4 拡張
既存の利用者との互換性を損なわずにこの形式へ機能を追加できるよう、ソースマップ利用器は、認識できない追加のプロパティーがあってもソースマップを拒否せず、そのプロパティーを無視しなければならない。
10 インデックスソースマップ
生成コード の連結や、その他の一般的な後処理を支援するために、ソースマップの別の表現形式をサポートする。
{
"version" : 3 ,
"file" : "app.js" ,
"sections" : [
{
"offset" : { "line" : 0 , "column" : 0 } ,
"map" : {
"version" : 3 ,
"file" : "section.js" ,
"sources" : [ "foo.js" , "bar.js" ] ,
"names" : [ "src" , "maps" , "are" , "fun" ] ,
"mappings" : "AAAA,E;;ABCDE"
}
} ,
{
"offset" : { "line" : 100 , "column" : 10 } ,
"map" : {
"version" : 3 ,
"file" : "another_section.js" ,
"sources" : [ "more.js" ] ,
"names" : [ "more" , "is" , "better" ] ,
"mappings" : "AAAA,E;AACA,C;ABCDE"
}
}
]
}
インデックスマップは、標準のマップの形式に従う。通常のソースマップと同様に、ファイル形式は最上位のオブジェクトを持つ JSON である。通常のソースマップと version および file フィールド を共有するが、新たに sections フィールド を持つ。
sections フィールド は、次のフィールドを持つオブジェクトの配列 である。
offset フィールド は、line と column の2つのフィールドを持つオブジェクトであり、参照されるソースマップが表す部分の、生成コード 内でのオフセットを表す。
map フィールド は、埋め込まれた完全なソースマップオブジェクトである。埋め込まれたマップは、それを含むインデックスマップから値を継承しない。
セクションは開始位置の順に並べなければならず、表されるセクション同士が重なってはならない。
10.1 DecodeIndexSourceMap ( json , baseURL )
The abstract operation DecodeIndexSourceMap takes arguments json (an Object) and baseURL (an URL ) and returns a Decoded Source Map Record . It performs the following steps when called:
sectionsField を JSONObjectGet (json , "sections" ) とする.表明: sectionsField は missing でない. sectionsField が JSON array でないならば、エラーをスローする.JSONObjectGet (json , "version" ) が 3 𝔽 でないならば、任意でエラーを報告する .fileField を GetOptionalString (json , "file" ) とする.sourceMap を Decoded Source Map Record { [[File]] : fileField , [[Sources]] : « », [[Mappings]] : « » } とする.previousOffsetPosition を null とする.previousLastMapping を null とする.JSONArrayIterate (sectionsField ) の各 JSON value section について、次を行う:section が JSON object でないならば:任意でエラーを報告する .そうでなければ:offset を JSONObjectGet (section , "offset" ) とする.offset が JSON object でないならば、エラーをスローする.offsetLine を JSONObjectGet (offset , "line" ) とする.offsetColumn を JSONObjectGet (offset , "column" ) とする.offsetLine が整数値を持つ Number でないならば:任意でエラーを報告する .offsetLine を +0 𝔽 に設定する.offsetColumn が整数値を持つ Number でないならば:任意でエラーを報告する .offsetColumn を +0 𝔽 に設定する.offsetPosition を新しい Position Record { [[Line]] : offsetLine , [[Column]] : offsetColumn } とする.previousOffsetPosition ≠ null ならば:ComparePositions (offsetPosition , previousOffsetPosition ) が lesser ならば、任意でエラーを報告する .previousLastMapping ≠ null ならば:ComparePositions (offsetPosition , previousLastMapping .[[GeneratedPosition]] ) が lesser ならば、任意でエラーを報告する .注記: 復号アルゴリズムのこの部分は、インデックスソースマップの sections フィールド のエントリーが順序付けられ、重複していないことを検査する。生成器はセクションが重複するインデックスソースマップを生成しないことが期待されるが、ソースマップ利用器は、例えば、セクションのオフセットが順序付けられているという、より単純な条件だけを検査してもよい. mapField を JSONObjectGet (section , "map" ) とする.mapField が JSON object でないならば、エラーをスローする.decodedSectionCompletion を Completion (DecodeSourceMap (json , baseURL )) とする.decodedSectionCompletion がスロー完了ならば:任意でエラーを報告する .そうでなければ:decodedSection を decodedSectionCompletion .[[Value]] とする.decodedSection .[[Sources]] の各 Decoded Source Record additionalSource について、次を行う:sourceMap .[[Sources]] が additionalSource を含まないならば:additionalSource を sourceMap .[[Sources]] に追加する.offsetMappings を新しい空の List とする.decodedSection .[[Mappings]] の各 Decoded Mapping Record mapping について、次を行う:mapping .[[GeneratedPosition]] .[[Line]] = 0 ならば:mapping .[[GeneratedPosition]] .[[Column]] を mapping .[[GeneratedPosition]] .[[Column]] + offsetColumn に設定する.mapping .[[GeneratedPosition]] .[[Line]] を mapping .[[GeneratedPosition]] .[[Line]] + offsetLine に設定する.mapping を offsetMappings に追加する.sourceMap .[[Mappings]] を sourceMap .[[Mappings]] と offsetMappings のリスト連結に設定する.previousOffsetPosition を offsetPosition に設定する.offsetMappings が空でないならば、previousLastMapping を offsetMappings の最後の要素に設定する. sourceMap を返す.
Note
実装は、対応付けを連結せずにインデックスソースマップのセクションを表現することを選択してよい。例えば、各セクションを個別に保存し、二分探索を行う方法がある。
11 ソースマップの取得
11.1 生成コードとソースマップの関連付け
ソースマップ形式は言語やプラットフォームに依存しないことを意図しているが、想定される用途である、ウェブサーバーでホストされる JavaScript について、ソースマップの参照方法を定義しておくことは有用である。
出力にソースマップを関連付ける方法は2つある。1つ目は、HTTP ヘッダーを追加するためのサーバー側の対応を必要とし、2つ目は、ソース内の注釈を必要とする。
ソースマップは、WHATWG URL で定義された URL を通して関連付ける。特に、URI に現れることが許可された集合に属さない文字は、パーセント符号化しなければならない。また、URL はデータ URI であってもよい。データ URI を sourcesContent とともに使用すると、完全に自己完結したソースマップを作成できる。
HTTP の sourcemap ヘッダーはソース内の注釈より優先される。両方が存在する場合、ヘッダーの URL を使用してソースマップファイルを解決することが望ましい。
ソースマップ URL の取得方法にかかわらず、その解決には次の同じ処理を使用する。
ソースマップ URL が絶対 URL でない場合、それは生成コード のソースオリジン に対する相対 URL である。ソースオリジン は、次のいずれかの場合によって決定する。
11.1.2 インライン注釈による関連付け
生成コード には、sourceMappingURL という名前でソースマップの URL を含むコメント、または言語や形式に応じた同等の構成要素を含めることが望ましい。この仕様は、JavaScript、CSS、および WebAssembly について、そのコメントの形式を定義する。他の言語も、同様の規約に従うことが望ましい。
実装ごとに、より複雑でない方法を選択できるよう、同じ言語について sourceMappingURL コメントを検出する方法が複数あってもよい。すべての抽出方法の結果が同じである場合、生成コード はソースマップに曖昧さなく関連付けられている という。
ソースマップに曖昧さなく関連付けられた1つ以上のソースファイルをツールが入力として受け取り、ソースマップに関連付けられた出力ファイルを生成する場合、その関連付けも曖昧さのないもの でなければならない。
Note
次の JavaScript コードはソースマップに関連付けられているが、その関連付けは曖昧さのないもの ではない。
let a = `
//# sourceMappingURL=foo.js.map
// `
ここからソースマップ URL を構文解析によって 抽出すると foo.js.map が得られる一方、構文解析せずに 抽出すると null が得られる。
module を module_decode (bytes ) とする.module が WebAssembly error ならば、null を返す.module の各カスタムセクション customSection について、次を行う:name を customSection の name とする.CodePointsToString (name ) が "sourceMappingURL" ならば:value を customSection の bytes とする.CodePointsToString (value ) を返す.null を返す.
WebAssembly はテキスト形式ではなく、コメントをサポートしないため、曖昧さのない単一の抽出方法をサポートする。URL は WebAssembly の名前 として符号化され、カスタムセクション の内容として配置される。WebAssembly コードを生成するツールが、sourceMappingURL という名前のカスタムセクション を2つ以上生成することは無効である。
11.2 ソースマップのフェッチ
11.2.1 FetchSourceMap ( url )
The abstract operation FetchSourceMap takes argument url (an URL ) and returns a Promise. It performs the following steps when called:
promiseCapability を NewPromiseCapability (%Promise% ) とする.request を、リクエスト URL が url である新しいリクエスト とする.processResponseConsumeBody を、仮引数 (response , bodyBytes ) を持ち、promiseCapability および url をキャプチャーし、呼び出されたときに次の手順を実行する新しい Abstract Closure とする:bodyBytes が null または failure ならば:Call (promiseCapability .[[Reject]] , undefined , « 新しい TypeError ») を実行する.戻る. url のスキーム が HTTP(S) スキーム であり、バイト列 `)]}'` が bodyBytes のバイト列接頭辞 ならば:bodyBytes のバイト列長 ≠ 0 であり、bodyBytes [0] が HTTP 改行バイト でない間、次を繰り返す:bodyBytes から0番目の要素を除去する.bodyString を Completion (bodyBytes を UTF-8 decode した結果) とする.IfAbruptRejectPromise (bodyString , promiseCapability ).jsonValue を Completion (ParseJSON (bodyString )) とする.IfAbruptRejectPromise (jsonValue , promiseCapability ).Call (promiseCapability .[[Resolve]] , undefined , « jsonValue ») を実行する.processResponseConsumeBody を processResponseConsumeBody に設定して、request のフェッチ を実行する.promiseCapability .[[Promise]] を返す.
Note
歴史的な理由により、HTTP(S) でソースマップを配信する場合、サーバーは文字列 )]}' で始まる行をソースマップの先頭に付加してよい。
)] } 'garbage here
{ "version" : 3 , ...}
は、次のように解釈される。
{ "version" : 3 , ...}
12 ソースマップレコードに対する操作
ソースマップを復号した後、ソースマップ利用器は、得られた Decoded Source Map Record を使用して、デバッグなどの用途のために位置情報を検索できる。この節では、ソースマップ利用器がサポートしてよい代表的な操作の動作を記述する。
GetOriginalPositions 操作は、生成コード 内のある位置に対応する、元のソース 内の位置を問い合わせるために使用してよい。例えば、デバッガーで利用者のマウスクリックに基づき、生成コード から元のソース へ移動するために使用できる。
12.1 GetOriginalPositions ( sourceMapRecord , generatedPosition )
The abstract operation GetOriginalPositions takes arguments sourceMapRecord (a Decoded Source Map Record ) and generatedPosition (a Position Record ) and returns a List of Original Position Records . It performs the following steps when called:
mappings を sourceMapRecord .[[Mappings]] とする.last を null とする.originalPositions を新しい空の List とする.mappings の各要素 mapping について、List の逆順で次を行う:last が null ならば:ComparePositions (mapping .[[GeneratedPosition]] , generatedPosition ) の実行結果が lesser または equal ならば:last を mapping に設定する.last が null でないならば:mappings の各要素 mapping について、次を行う:ComparePositions (last .[[GeneratedPosition]] , mapping .[[GeneratedPosition]] ) の実行結果が equal ならば:mapping .[[OriginalPosition]] を originalPositions に追加する.originalPositions を返す.
Annex A (informative) 慣例
ソースマップを扱う場合、または生成する場合は、次の慣例に従うことが望ましい。
A.1 ソースマップの命名
一般に、ソースマップには、生成ファイルの名前に .map 拡張子を付けた名前を使用する。例えば、page.js に対しては、page.js.map という名前のソースマップを生成する。
A.2 eval で評価されるコードと名前付き生成コードの関連付け
eval で評価されるコードでソースマップを使用するための既存の慣例があり、これをサポートすることが望ましい。その形式は、次のとおりである。
これは「//@ sourceURL で eval に名前を付ける 」で説明されている。
Annex B (informative) 注記
B.1 言語に依存しないスタックの対応付け
ソース言語についての知識を用いないスタックトレースの対応付けは、この文書の対象 ではない。
B.2 多段階の対応付け
ツールが何らかの DSL(テンプレート)からソースを生成したり、TypeScript → JavaScript → 圧縮された JavaScript という順にコンパイルしたりして、最終的なソースマップの作成までに複数回の変換を行うことが、ますます一般的になっている。この問題は、2つの方法のいずれかで扱える。容易だが情報が失われる方法は、デバッグのためには処理途中の段階を無視することである。この場合、変換によるソース位置情報を無視する(中間の変換結果を「元のソース 」と見なす)か、ソース位置情報を引き継ぐ(中間の変換を隠す)。より完全な方法は、複数段階の対応付けをサポートすることである。元のソース にもソースマップへの参照がある場合、それも使用するかどうかを利用者が選択できるようにする。
ただし、JavaScript 以外で「ソースマップへの参照」がどのような形式になるかは明確でない。より具体的には、JavaScript 形式の単一行コメントをサポートしない言語で、ソースマップへの参照をどのように表すかが明確でない。
Annex C (informative) 他の仕様で定義される用語
この節では、この文書で使用する用語およびアルゴリズムのうち、ECMA-262 以外の外部仕様で定義されるものをすべて列 挙する。
WebAssembly コア仕様 <https://www.w3.org/TR/wasm-core-2/ >
カスタムセクション ,
module_decode ,
WebAssembly error ,
WebAssembly の名前
WHATWG Encoding <https://encoding.spec.whatwg.org/ >
UTF-8 decode
WHATWG Fetch <https://fetch.spec.whatwg.org/ >
フェッチ ,
HTTP 改行バイト ,
processResponseConsumeBody ,
リクエスト ,
リクエスト URL
WHATWG Infra <https://infra.spec.whatwg.org/ >
バイト列 ,
バイト列接頭辞 ,
バイト列長 ,
WHATWG URL <https://url.spec.whatwg.org/ >
HTTP(S) スキーム ,
スキーム ,
URL ,
URL 構文解析
Annex D (informative) 文献一覧
IETF RFC 4648, Base16、Base32、および Base64 のデータ符号化 、参照先: <https://datatracker.ietf.org/doc/html/rfc4648 >
ECMA-262, ECMAScript® 言語仕様 、参照先: <https://tc39.es/ecma262/ >
ECMA-404, JSON データ交換形式 、参照先: <https://www.ecma-international.org/publications-and-standards/standards/ecma-404/ >
WebAssembly コア仕様 、参照先: <https://www.w3.org/TR/wasm-core-2/ >
WHATWG Encoding 、参照先: <https://encoding.spec.whatwg.org/ >
WHATWG Fetch 、参照先: <https://fetch.spec.whatwg.org/ >
WHATWG Infra 、参照先: <https://infra.spec.whatwg.org/ >
WHATWG URL 、参照先: <https://url.spec.whatwg.org/ >
//@ sourceURL で eval に名前を付ける 、Firebug (2009)、参照先: <http://blog.getfirebug.com/2009/08/11/give-your-eval-a-name-with-sourceurl/ >
ソースマップ改訂第2版の提案 、John Lenz (2010)、参照先: <https://docs.google.com/document/d/1xi12LrcqjqIHTtZzrzZKmQ3lbTv9mKrN076UB-j3UZQ/ >
可変長数量 、Wikipedia、参照先: <https://en.wikipedia.org/wiki/Variable-length_quantity >
Annex E (informative) 奥付
この仕様は、Ecmarkup というプレーンテキストのソース形式を使用し、GitHub で執筆されている。Ecmarkup は HTML と Markdown の方言であり、ECMAScript 仕様をプレーンテキストで執筆し、この文書の編集規約に従った、十分な機能を備える HTML 表示へと処理するための枠組みとツール群を提供する。Ecmarkup は、構文定義用の Grammarkdown や、アルゴリズムの手順の記述用の Ecmarkdown など、他の複数の形式や技術を基盤とし、統合している。この仕様の PDF 版は、HTML 表示を PDF に印刷することで作成される。
この仕様の初版は、HTML と Markdown に基づく別のプレーンテキストのソース形式である Bikeshed を使用して執筆された。
この文書の標準化前の版は、Google Docs を使用して執筆された。
Copyright & Software License
Ecma International
Rue du Rhone 114
CH-1204 Geneva
Tel: +41 22 849 6000
Fax: +41 22 849 6001
Web: https://ecma-international.org/
Copyright Notice
ALTERNATIVE COPYRIGHT NOTICE AND COPYRIGHT LICENSE
© 2026 Ecma International
By obtaining and/or copying this work, you (the licensee) agree that you
have read, understood, and will comply with the following terms and
conditions.
Permission under Ecma’s copyright to copy, modify, prepare derivative works
of, and distribute this work, with or without modification, for any purpose
and without fee or royalty is hereby granted, provided that you include the
following on ALL copies of the work or portions thereof, including
modifications:
(i) The full text of this COPYRIGHT NOTICE AND COPYRIGHT LICENSE in a location
viewable to users of the redistributed or derivative work.
(ii) Any pre-existing intellectual property disclaimers, notices, or terms and
conditions. If none exist, the Ecma alternative copyright notice should be
included.
(iii) Notice of any changes or modifications, through a copyright statement on
the document such as “This document includes material copied from or
derived from ソースマップ形式仕様 https://tc39.es/ecma426/.
Copyright © Ecma International.”
Disclaimers
THIS WORK IS PROVIDED “AS IS,” AND COPYRIGHT HOLDERS MAKE NO REPRESENTATIONS
OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO, WARRANTIES
OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF
THE DOCUMENT WILL NOT INFRINGE ANY THIRD PARTY PATENTS, COPYRIGHTS,
TRADEMARKS OR OTHER RIGHTS.
COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR
CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE DOCUMENT.
The name and trademarks of copyright holders may NOT be used in advertising
or publicity pertaining to the work without specific, written prior
permission. Title to copyright in this work will at all times remain with
copyright holders.
Software License
All Software contained in this document ("Software") is protected by copyright and is being made available under the "BSD License", included below. This Software may be subject to third party rights (rights from parties other than Ecma International), including patent rights, and no licenses under such third party rights are granted under this license even if the third party concerned is a member of Ecma International. SEE THE ECMA CODE OF CONDUCT IN PATENT MATTERS AVAILABLE AT https://ecma-international.org/memento/codeofconduct.htm FOR INFORMATION REGARDING THE LICENSING OF PATENT CLAIMS THAT ARE REQUIRED TO IMPLEMENT ECMA INTERNATIONAL STANDARDS.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
Neither the name of the authors nor Ecma International may be used to endorse or promote products derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE ECMA INTERNATIONAL "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ECMA INTERNATIONAL BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.