?uem/p1-90`super を含むソーステキストが super である場合、Syntax Error です。super に関する追加のScript Record は、評価されるスクリプトに関する情報をカプセル化します。各 script record は
| フィールド名 | 値の型 | 意味 |
|---|---|---|
| [[Realm]] |
a |
このスクリプトが作成された realm。 |
| [[ECMAScriptCode]] |
a |
このスクリプトのソーステキストを構文解析した結果。 |
| [[LoadedModules]] |
a |
このスクリプトによってインポートされた指定子文字列から、解決された |
| [[HostDefined]] |
anything (default value is |
スクリプトに追加情報を関連付ける必要がある |
実装は、あるスクリプトソーステキストについて ParseScript を評価する前に、そのソーステキストを構文解析し、
スクリプトを評価するための
呼び出されたとき、次の手順を実行します。
var および function 束縛(非 strict 明示的な var または function 宣言とは異なり、
super である場合、Syntax Error です。
export default
ModuleRequest Record は、指定されたインポート属性を持つモジュールをインポートする要求を表します。これは次のフィールドで構成されます。
| フィールド名 | 値の型 | 意味 |
|---|---|---|
| [[Specifier]] | a String | モジュール指定子 |
| [[Attributes]] |
a |
インポート属性 |
LoadedModuleRequest Record は、モジュールをインポートする要求と、その結果として得られる
| フィールド名 | 値の型 | 意味 |
|---|---|---|
| [[Specifier]] | a String | モジュール指定子 |
| [[Attributes]] |
a |
インポート属性 |
| [[Module]] |
a |
このモジュール要求に対応する、読み込まれたモジュール |
ImportAttribute Record は次のフィールドで構成されます。
| フィールド名 | 値の型 | 意味 |
|---|---|---|
| [[Key]] | a String | 属性キー |
| [[Value]] | a String | 属性値 |
Module Record は、単一モジュールのインポートおよびエクスポートに関する構造情報をカプセル化します。この情報は、接続されたモジュール群のインポートとエクスポートをリンクするために使用されます。Module Record には、モジュールを評価するときにだけ使用される4つのフィールドが含まれます。
仕様上、Module Record は
Module Record は
| フィールド名 | 値の型 | 意味 |
|---|---|---|
| [[Realm]] |
a |
このモジュールが作成された |
| [[Environment]] |
a |
このモジュールのトップレベル束縛を含む |
| [[Namespace]] |
an Object or |
このモジュールについて作成されている場合、その Module Namespace Object( |
| [[HostDefined]] |
anything (default value is |
モジュールに追加情報を関連付ける必要がある |
| メソッド | 目的 | 定義 |
|---|---|---|
| LoadRequestedModules ( [ hostDefined ] ) | 抽象メソッド LoadRequestedModules。省略可能な引数 hostDefined (任意の値)。戻り値:Promise。 すべての依存関係を再帰的に読み込むことによって、モジュールをリンクするための準備を行います。 |
この仕様内では次の型に定義があります。 |
| GetExportedNames ( [ exportStarSet ] ) | 抽象メソッド GetExportedNames。省略可能な引数 exportStarSet ( このモジュールから直接または間接的にエクスポートされるすべての名前のリストを返します。 このメソッドを呼び出す前に、 |
この仕様内では次の型に定義があります。 |
| ResolveExport ( exportName [ , resolveSet ] ) | 抽象メソッド ResolveExport。引数 exportName (String)および省略可能な引数 resolveSet ( このモジュールによってエクスポートされた名前の束縛を返します。束縛は、{ [[Module]]: この操作が特定の exportName、resolveSet の組を引数として呼び出されるたびに、同じ結果を返さなければなりません。 このメソッドを呼び出す前に、 |
この仕様内では次の型に定義があります。 |
| Link ( ) | 抽象メソッド Link。引数なし。戻り値:( すべてのモジュール依存関係を推移的に解決し、 このメソッドを呼び出す前に、 |
この仕様内では次の型に定義があります。 |
| Evaluate ( ) | 抽象メソッド Evaluate。引数なし。戻り値:Promise。 このモジュールとその依存関係の評価に対する promise を返します。評価が成功した場合、またはすでに正常に評価済みの場合は解決し、評価エラーの場合、またはすでに評価に失敗している場合は拒否します。promise が拒否された場合、 このメソッドを呼び出す前に、 |
この仕様内では次の型に定義があります。 |
Cyclic Module Record は、
| フィールド名 | 値の型 | 意味 |
|---|---|---|
| [[Status]] |
|
初期値は |
| [[EvaluationError]] |
a throw completion or |
評価中に発生した例外を表すスロー完了。例外が発生していない場合、または [[Status]] が |
| [[DFSAncestorIndex]] |
an integer or |
|
| [[RequestedModules]] |
a |
このモジュール内のインポートに関連付けられた |
| [[LoadedModules]] |
a |
この record によって表されるモジュールが、対応するインポート属性を伴ってモジュールのインポートを要求するために使用した指定子文字列から、解決された |
| [[CycleRoot]] |
a |
サイクルで最初に訪問されたモジュール、すなわち強連結成分のルート DFS 祖先。サイクルに属さないモジュールの場合、これはそのモジュール自身です。 |
| [[HasTLA]] | a Boolean |
このモジュール自体が非同期であるかどうか(たとえば、トップレベル await を含む |
| [[AsyncEvaluationOrder]] |
|
このフィールドは初期状態で |
| [[TopLevelCapability]] |
a |
このモジュールが何らかのサイクルの [[CycleRoot]] であり、そのサイクル内のいずれかのモジュールに対して |
| [[AsyncParentModules]] |
a |
このモジュールまたは依存関係の [[HasTLA]] が |
| [[PendingAsyncDependencies]] |
an integer or |
このモジュールに非同期依存関係がある場合、このフィールドは、このモジュールについて実行が残っている非同期依存モジュールの数を追跡します。非同期依存関係を持つモジュールは、このフィールドが 0 になり、実行エラーがない場合に実行されます。 |
| メソッド | 目的 | 定義 |
|---|---|---|
| InitializeEnvironment ( ) | 抽象メソッド InitializeEnvironment。引数なし。戻り値:( |
この仕様内では次の型に定義があります。 |
| ExecuteModule ( [ capability ] ) | 抽象メソッド ExecuteModule。省略可能な引数 capability ( |
この仕様内では次の型に定義があります。 |
GraphLoadingState Record は、モジュールグラフの読み込み処理に関する情報を含む
| フィールド名 | 値の型 | 意味 |
|---|---|---|
| [[PromiseCapability]] |
a |
読み込み処理が完了したときに解決する promise。 |
| [[IsLoading]] | a Boolean | 読み込み処理が、成功でもエラーでもまだ終了していない場合は true。 |
| [[PendingModulesCount]] | a non-negative integer |
保留中の |
| [[Visited]] |
a |
循環依存関係による無限ループを避けるため、現在の読み込み処理によってすでに読み込まれた |
| [[HostDefined]] |
anything (default value is |
|
以下は、
a
<link rel="preload" as="..."> タグに正しい fetch destination を設定するために使用されます。
import() 式が hostDefined パラメーターを設定することはありません。
a
a
モジュールは InnerModuleEvaluation によって走査されている間は
非同期サイクルのモジュールに依存するモジュールは、そのサイクルが
ルート module の非同期実行が fulfilled になると、この関数は、この完了時に同期的にまとめて実行できるモジュールのリストを決定し、それらを execList に格納します。
この非規範的な節では、一般的なモジュールグラフのリンクと評価について、特にエラーがどのように発生し得るかに重点を置いた一連の例を示します。
まず、次の単純なモジュールグラフを考えます。
まず、エラー条件がないものと仮定します。
次に、A.
最後に、
次に、別の種類のエラー条件を考えます。
このシナリオでは、モジュール A は別のモジュールへの依存関係を宣言していますが、そのモジュールに対応する
ここでの読み込み、リンク、および評価エラーの違いは、次の特性によるものです。
次に、サイクルを持つモジュールグラフを考えます。
ここではエントリポイントがモジュール A であると仮定するため、
次に
循環モジュールグラフの評価段階でも、成功する場合は同様のことが起こります。
次に、A にリンクエラーがある場合を考えます。たとえば、存在しない束縛を C からインポートしようとする場合です。この場合でも、A に対する
あるいは、A に評価エラーがある場合、たとえばそのソースコードが例外をスローする場合を考えます。この場合も、A に対する await を含む、またはそれに依存するモジュールの連鎖を形成する [[AsyncParentModules]] にエラーを記録します。したがって、A と B はどちらも
最後に、すべてのモジュールが非同期に完了する、サイクルを持つモジュールグラフを考えます。
読み込みとリンクは以前と同様に行われ、すべてのモジュールの [[Status]] は最終的に
A.
|
フィールド
|
A | B | C | D | E |
|---|---|---|---|---|---|
| [[DFSAncestorIndex]] | 0 | 0 | 0 | 0 | 4 |
| [[Status]] | |||||
| [[AsyncEvaluationOrder]] | 4 | 1 | 3 | 0 | 2 |
| [[AsyncParentModules]] | « » | « A » | « A » | « B, C » | « C » |
| [[PendingAsyncDependencies]] | 2 (B and C) | 1 (D) | 2 (D and E) | 0 | 0 |
E が最初に実行を完了すると仮定します。そうなると
|
フィールド
|
C | E |
|---|---|---|
| [[DFSAncestorIndex]] | 0 | 4 |
| [[Status]] | ||
| [[AsyncEvaluationOrder]] | 3 | |
| [[AsyncParentModules]] | « A » | « C » |
| [[PendingAsyncDependencies]] | 1 (D) | 0 |
次に D が完了します(まだ実行中だった唯一のモジュールであったためです)。そうなると await を含む場合、B と並行して実行される可能性があります)。更新されたモジュールのフィールドは
|
フィールド
|
B | C | D |
|---|---|---|---|
| [[DFSAncestorIndex]] | 0 | 0 | 0 |
| [[Status]] | |||
| [[AsyncEvaluationOrder]] | 1 | 3 | |
| [[AsyncParentModules]] | « A » | « A » | « B, C » |
| [[PendingAsyncDependencies]] | 0 | 0 | 0 |
次に C が実行を完了すると仮定します。そうなると
|
フィールド
|
A | C |
|---|---|---|
| [[DFSAncestorIndex]] | 0 | 0 |
| [[Status]] | ||
| [[AsyncEvaluationOrder]] | 4 | |
| [[AsyncParentModules]] | « » | « A » |
| [[PendingAsyncDependencies]] | 1 (B) | 0 |
次に B が実行を完了します。そうなると
|
フィールド
|
A | B |
|---|---|---|
| [[DFSAncestorIndex]] | 0 | 0 |
| [[Status]] | ||
| [[AsyncEvaluationOrder]] | 4 | |
| [[AsyncParentModules]] | « » | « A » |
| [[PendingAsyncDependencies]] | 0 | 0 |
最後に A が実行を完了します。そうなると
|
フィールド
|
A |
|---|---|
| [[DFSAncestorIndex]] | 0 |
| [[Status]] | |
| [[AsyncEvaluationOrder]] | |
| [[AsyncParentModules]] | « » |
| [[PendingAsyncDependencies]] | 0 |
代わりに、B が実行を完了する前に C の実行が失敗してエラーを返す失敗ケースを考えます。そうなると
|
フィールド
|
A | C |
|---|---|---|
| [[DFSAncestorIndex]] | 0 | 0 |
| [[Status]] | ||
| [[AsyncEvaluationOrder]] | ||
| [[AsyncParentModules]] | « » | « A » |
| [[PendingAsyncDependencies]] | 1 (B) | 0 |
| [[EvaluationError]] | C の評価エラー |
C が C のエラーを指定して A に対して
|
フィールド
|
A |
|---|---|
| [[DFSAncestorIndex]] | 0 |
| [[Status]] | |
| [[AsyncEvaluationOrder]] | |
| [[AsyncParentModules]] | « » |
| [[PendingAsyncDependencies]] | 0 |
| [[EvaluationError]] | C の評価エラー |
その後、B はエラーなく実行を完了します。そうなると
|
フィールド
|
A | B |
|---|---|---|
| [[DFSAncestorIndex]] | 0 | 0 |
| [[Status]] | ||
| [[AsyncEvaluationOrder]] | 4 | 1 |
| [[AsyncParentModules]] | « » | « A » |
| [[PendingAsyncDependencies]] | 0 | 0 |
| [[EvaluationError]] | C の評価エラー |
Source Text Module Record は、目標記号
| フィールド名 | 値の型 | 意味 |
|---|---|---|
| [[ECMAScriptCode]] |
a |
|
| [[Context]] |
an |
このモジュールに関連付けられた |
| [[ImportMeta]] |
an Object or |
import.meta メタプロパティを通じて公開されるオブジェクト。ECMAScript コードからアクセスされるまでは |
| [[ImportEntries]] |
a |
このモジュールのコードから導出された ImportEntry record の |
| [[LocalExportEntries]] |
a |
このモジュール内で発生する宣言に対応する、このモジュールのコードから導出された ExportEntry record の |
| [[IndirectExportEntries]] |
a |
このモジュール内で発生する再エクスポートされたインポート、または export * as namespace 宣言からのエクスポートに対応する、このモジュールのコードから導出された ExportEntry record の |
| [[StarExportEntries]] |
a |
export * as namespace 宣言を含まず、このモジュール内で発生する export * 宣言に対応する、このモジュールのコードから導出された ExportEntry record の |
ImportEntry Record は、単一の宣言的インポートに関する情報を整理した
| フィールド名 | 値の型 | 意味 |
|---|---|---|
| [[ModuleRequest]] |
a |
|
| [[ImportName]] |
a String or |
[[ModuleRequest]] によって識別されるモジュールから目的の束縛がエクスポートされる名前。値 |
| [[LocalName]] | a String | インポートするモジュール内からインポートされた値へローカルにアクセスするために使用される名前。 |
| import 文の形式 | [[ModuleRequest]] | [[ImportName]] | [[LocalName]] |
|---|---|---|---|
import v from "mod";
|
|
|
|
import * as ns from "mod";
|
|
|
|
import {x} from "mod";
|
|
|
|
import {x as v} from "mod";
|
|
|
|
import "mod";
|
|
||
ExportEntry Record は、単一の宣言的エクスポートに関する情報を整理した
| フィールド名 | 値の型 | 意味 |
|---|---|---|
| [[ExportName]] |
a String or |
このモジュールによってこの束縛をエクスポートするために使用される名前。 |
| [[ModuleRequest]] |
a |
|
| [[ImportName]] |
a String, |
[[ModuleRequest]] によって識別されるモジュールから目的の束縛がエクスポートされる名前。export * as ns from "mod" 宣言では export * from "mod" 宣言では |
| [[LocalName]] |
a String or |
インポートするモジュール内から、エクスポートされた値にローカルにアクセスするために使用される名前。エクスポートされた値がモジュール内からローカルにアクセスできない場合は |
| export 文の形式 | [[ExportName]] | [[ModuleRequest]] | [[ImportName]] | [[LocalName]] |
|---|---|---|---|---|
export var v;
|
|
|
|
|
export default function f() {}
|
|
|
|
|
export default function () {}
|
|
|
|
|
export default 42;
|
|
|
|
|
export {x};
|
|
|
|
|
export {v as x};
|
|
|
|
|
export {x} from "mod";
|
|
|
|
|
export {v as x} from "mod";
|
|
|
|
|
export * from "mod";
|
|
|
|
|
export * as ns from "mod";
|
|
|
|
|
次の定義は、
export * from を通じて同じ名前で同じ束縛または namespace を2回エクスポートすることから生じるawait とする。実装は、あるモジュールソーステキストについて ParseModule を評価する前に、そのソーステキストを構文解析し、
以下は、
a
a
定義元モジュールが見つかった場合、
呼び出されると、次の手順を実行する。
* エクスポートが複数存在する。以下は、
a
a
Synthetic Module Record は、仕様によって定義されるモジュールに関する情報を表すために使用されます。そのエクスポート名は作成時に静的に定義されますが、対応する値は
| フィールド名 | 値の型 | 意味 |
|---|---|---|
| [[ExportNames]] | a |
モジュールのエクスポート名。このリストには重複は含まれません。 |
| [[EvaluationSteps]] | an |
モジュールの評価時に実行する初期化ロジックであり、 |
以下は、
a
a
a
a
a
ホスト定義の抽象操作 HostLoadImportedModule。引数 referrer ((
referrer が
<button type="button" onclick="import('./foo.mjs')">Click me</button>
import()
HostLoadImportedModule の実装は、次の要件に適合しなければなりません。
この操作が、次の条件を満たす2つの (referrer, moduleRequest) の組について複数回呼び出された場合、
そして、result が
moduleRequest.[[Attributes]] が、entry.[[Key]] が
実際に実行される処理は
ホスト定義の抽象操作 HostGetSupportedImportAttributes。引数なし。戻り値:
HostGetSupportedImportAttributes の実装は、次の要件に適合しなければなりません。
HostGetSupportedImportAttributes の既定の実装は、新しい空の
GetModuleNamespace がスローすることはありません。代わりに、解決不能な名前はこの時点で namespace から単純に除外されます。それらがどこからも明示的に要求されない曖昧な star export だけでない限り、後で実際のリンクエラーになります。
上記の規則は、
ExportedBindings は、
次の生成規則ごとに定義される。
ExportedNames は、
次の生成規則ごとに定義される。