?um/p1-90`super を含むソーステキストが直接 eval によって処理される eval コードでない限り、super を含む場合は構文エラーである。直接 eval 内での super に関する追加のThe syntax-directed operation UNKNOWN takes UNPARSEABLE ARGUMENTS. It is defined piecewise over the following productions:
Script Record は、評価されるスクリプトに関する情報をカプセル化する。各
| フィールド名 | 値の型 | 意味 |
|---|---|---|
| [[Realm]] |
|
このスクリプトが作成されたレルム。 |
| [[ECMAScriptCode]] |
|
このスクリプトのソーステキストを解析した結果。 |
| [[LoadedModules]] |
|
このスクリプトによってインポートされた指定子文字列から解決された |
| [[HostDefined]] |
任意(デフォルト値は |
スクリプトに追加情報を関連付ける必要がある |
The abstract operation ParseScript takes arguments sourceText (
実装は、そのスクリプトソーステキストに対する ParseScript の評価より前に、スクリプトソーステキストを解析し早期エラー条件を分析してもよい。ただし、エラーの報告は、この仕様が実際にそのソーステキストに対して ParseScript を実行する時点まで延期されなければならない。
The abstract operation ScriptEvaluation takes argument scriptRecord (
The abstract operation GlobalDeclarationInstantiation takes arguments script (
スクリプトを評価するために実行コンテキストが確立されるとき、宣言は現在のグローバル環境でインスタンス化される。コードで宣言された各グローバル束縛がインスタンス化される。
呼び出されたとき、次の手順を実行する:
var および function 束縛(非 strict 直接 eval によって導入されるものを除く)は非設定可能であり、したがって制限されたグローバルプロパティである。明示的な var または function 宣言とは異なり、
super を含む場合、構文エラーである。
重複する ExportedNames ルールは、export default
The abstract operation UNKNOWN takes UNPARSEABLE ARGUMENTS. importEntries によって定義されるすべてのローカル名束縛のリストを作成する。 It performs the following steps when called:
ModuleRequest Record は、指定されたインポート属性でモジュールをインポートするリクエストを表す。次のフィールドで構成される:
| フィールド名 | 値の型 | 意味 |
|---|---|---|
| [[Specifier]] | 文字列 | モジュール指定子 |
| [[Attributes]] |
|
インポート属性 |
LoadedModuleRequest Record は、モジュールをインポートするリクエストと結果として得られる
| フィールド名 | 値の型 | 意味 |
|---|---|---|
| [[Specifier]] | 文字列 | モジュール指定子 |
| [[Attributes]] |
|
インポート属性 |
| [[Module]] |
|
このモジュールリクエストに対応するロードされたモジュール |
ImportAttribute Record は次のフィールドで構成される:
| フィールド名 | 値の型 | 意味 |
|---|---|---|
| [[Key]] | 文字列 | 属性キー |
| [[Value]] | 文字列 | 属性値 |
The abstract operation ModuleRequestsEqual takes arguments left (
The syntax-directed operation UNKNOWN takes UNPARSEABLE ARGUMENTS. It is defined piecewise over the following productions:
Module Record は、単一のモジュールのインポートとエクスポートの構造情報をカプセル化する。この情報は、接続されたモジュール群のインポートとエクスポートをリンクするために使用される。Module Record には、モジュールを評価するときにのみ使用される4つのフィールドが含まれている。
仕様の目的上、Module Record 値は
Module Record は
| フィールド名 | 値の型 | 意味 |
|---|---|---|
| [[Realm]] |
|
このモジュールが作成されたレルム。 |
| [[Environment]] |
Module |
このモジュールのトップレベル束縛を含む |
| [[Namespace]] |
Object または |
このモジュールに対して作成されている場合の Module Namespace Object( |
| [[HostDefined]] |
任意(デフォルト値は |
モジュールに追加情報を関連付ける必要がある |
| メソッド | 目的 | 定義 |
|---|---|---|
| LoadRequestedModules ( optional hostDefined: 任意の型, ): Promise |
モジュールのすべての依存関係を再帰的にロードし、リンクの準備を行う。 |
本仕様では以下の型に定義がある。 |
| GetExportedNames ( optional exportStarSet: ソーステキストモジュールレコードのリスト, ): 文字列のリスト |
このモジュールから直接的または間接的にエクスポートされるすべての名前のリストを返す。 このメソッドの呼び出し前に LoadRequestedModules が正常終了している必要がある。 |
本仕様では以下の型に定義がある。 |
|
ResolveExport (
exportName: 文字列,
optional resolveSet: [[Module]](モジュールレコード)と [[ExportName]](文字列)フィールドを持つレコードのリスト,
): |
このモジュールによってエクスポートされる名前のバインディングを返す。バインディングは ResolvedBinding レコード として表され、形式は { [[Module]]: モジュールレコード, [[BindingName]]: 文字列 | この操作が特定の exportName, resolveSet の組み合わせで呼ばれるたびに、常に同じ結果を返さなければならない。 このメソッドの呼び出し前に LoadRequestedModules が正常終了している必要がある。 |
本仕様では以下の型に定義がある。 |
| Link ( ): |
すべてのモジュール依存関係を推移的に解決し、 このメソッドの呼び出し前に LoadRequestedModules が正常終了している必要がある。 |
本仕様では以下の型に定義がある。 |
| Evaluate ( ): Promise |
このモジュールおよびその依存関係の評価に対するプロミスを返す。正常に評価が完了した場合や、すでに正常に評価済みの場合は resolve され、評価エラーの場合や、すでに評価に失敗している場合には reject される。プロミスが reject された場合、 このメソッドの呼び出し前に Link が正常終了している必要がある。 |
本仕様では以下の型に定義がある。 |
The abstract operation EvaluateModuleSync takes argument module (
Cyclic Module Record は、
| フィールド名 | 値の型 | 意味 |
|---|---|---|
| [[Status]] |
|
初期値は |
| [[EvaluationError]] |
|
評価中に発生した例外を表す |
| [[DFSAncestorIndex]] |
|
Link と Evaluate 中のみ使用される補助フィールド。[[Status]] が |
| [[RequestedModules]] |
|
そのモジュール内の import に対応する |
| [[LoadedModules]] |
|
このレコードが表すモジュールが使用した指定子文字列と解決済み |
| [[CycleRoot]] |
|
サイクル内で最初に訪れたモジュール(強連結成分の DFS ルート)。サイクル外ならモジュール自身。Evaluate 完了後、モジュールの [[DFSAncestorIndex]] はその [[CycleRoot]] の深さ優先インデックスとなる。 |
| [[HasTLA]] | Boolean |
このモジュール自体が個別に非同期かどうか(例: top-level await を含む |
| [[AsyncEvaluationOrder]] |
|
初期値 |
| [[TopLevelCapability]] |
|
あるサイクルの [[CycleRoot]] で、かつそのサイクル内のモジュールに Evaluate() が呼ばれた場合、その全評価の |
| [[AsyncParentModules]] |
|
このモジュールまたは依存に [[HasTLA]] |
| [[PendingAsyncDependencies]] |
|
非同期依存がある場合、残り非同期依存モジュールの数。これが 0 になり実行エラーがなければモジュールは実行される。 |
| メソッド | 目的 | 定義 |
|---|---|---|
| InitializeEnvironment ( ): |
モジュールの |
本仕様では以下の型に定義がある。 |
|
ExecuteModule (
optional capability: a |
モジュールのコードをその実行コンテキスト内で評価する。もしこのモジュールの [[HasTLA]] が |
本仕様では以下の型に定義がある。 |
GraphLoadingState Record はモジュールグラフの読み込み過程に関する情報を保持し、
| フィールド名 | 値の型 | 意味 |
|---|---|---|
| [[PromiseCapability]] |
|
読み込み処理完了時に解決する Promise。 |
| [[IsLoading]] | Boolean |
成功またはエラーでまだ終了していなければ |
| [[PendingModulesCount]] |
非負 |
保留中の |
| [[Visited]] |
|
現在の読み込み過程ですでにロードされた |
| [[HostDefined]] |
任意(初期値 |
LoadRequestedModules 呼び出し元から |
以下は
The LoadRequestedModules concrete method of
<link rel="preload" as="..."> の適切な fetch destination 設定に使う。import() 式は hostDefined を設定しない。
The abstract operation InnerModuleLoading takes arguments state (
The abstract operation ContinueModuleLoading takes arguments state (
The Link concrete method of
The abstract operation InnerModuleLinking takes arguments module (
The Evaluate concrete method of
The abstract operation InnerModuleEvaluation takes arguments module (
モジュールは InnerModuleEvaluation に走査されている間
非同期サイクルに属するモジュールに依存するモジュールは、サイクルが
The abstract operation ExecuteAsyncModule takes argument module (
The abstract operation GatherAvailableAncestors takes arguments module (
非同期実行が root module で充足された際、この関数は同期的に一括実行可能なモジュール集合を決定し execList を構築する。
The abstract operation AsyncModuleExecutionFulfilled takes argument module (
The abstract operation AsyncModuleExecutionRejected takes arguments module (
この非規範節では、よくあるモジュールグラフのリンクおよび評価例と、エラー発生の様態に焦点を当てた事例を示す。
まず次の単純なモジュールグラフを考える:
先にエラー条件が無いと仮定する。
次にリンクエラーを含むケースを考える(A.LoadRequestedModules() が成功後)。もし C の
最後に、Link() 成功後の評価エラーを含むケース。C の
次に別種のエラー条件を考える:
このシナリオではモジュール A が他モジュールへの依存を宣言するが、その
読み込み・リンク・評価エラーの差異は以下の特徴による:
次にサイクルを持つモジュールグラフ:
エントリポイントを A と仮定し、
続いて A.Link() により A の
成功ケースでは評価段階も同様の物語。
次に A がリンクエラー(例: C に存在しない束縛 import)を持つケース。上述のステップは(二度目の
別に A が評価エラー(ソースが例外 throw)ケース。評価版のステップが進み、二度目の
最後に、全モジュールが非同期に完了するサイクル付きグラフ:
読み込みとリンクは同様で全て [[Status]]
A.Evaluate() は A, B, D に
|
Field
|
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 と C) | 1 (D) | 2 (D と E) | 0 | 0 |
最初に E が終了すると仮定。終了で
|
Field
|
C | E |
|---|---|---|
| [[DFSAncestorIndex]] | 0 | 4 |
| [[Status]] | ||
| [[AsyncEvaluationOrder]] | 3 | |
| [[AsyncParentModules]] | « A » | « C » |
| [[PendingAsyncDependencies]] | 1 (D) | 0 |
次に D が終了(唯一の実行中だった)。
|
Field
|
B | C | D |
|---|---|---|---|
| [[DFSAncestorIndex]] | 0 | 0 | 0 |
| [[Status]] | |||
| [[AsyncEvaluationOrder]] | 1 | 3 | |
| [[AsyncParentModules]] | « A » | « A » | « B, C » |
| [[PendingAsyncDependencies]] | 0 | 0 | 0 |
次に C が終了。
|
Field
|
A | C |
|---|---|---|
| [[DFSAncestorIndex]] | 0 | 0 |
| [[Status]] | ||
| [[AsyncEvaluationOrder]] | 4 | |
| [[AsyncParentModules]] | « » | « A » |
| [[PendingAsyncDependencies]] | 1 (B) | 0 |
次いで B が終了。
|
Field
|
A | B |
|---|---|---|
| [[DFSAncestorIndex]] | 0 | 0 |
| [[Status]] | ||
| [[AsyncEvaluationOrder]] | 4 | |
| [[AsyncParentModules]] | « » | « A » |
| [[PendingAsyncDependencies]] | 0 | 0 |
最後に A が終了し
|
Field
|
A |
|---|---|
| [[DFSAncestorIndex]] | 0 |
| [[Status]] | |
| [[AsyncEvaluationOrder]] | |
| [[AsyncParentModules]] | « » |
| [[PendingAsyncDependencies]] | 0 |
別の失敗例として B 完了前に C がエラーで失敗。
|
Field
|
A | C |
|---|---|---|
| [[DFSAncestorIndex]] | 0 | 0 |
| [[Status]] | ||
| [[AsyncEvaluationOrder]] | ||
| [[AsyncParentModules]] | « » | « A » |
| [[PendingAsyncDependencies]] | 1 (B) | 0 |
| [[EvaluationError]] | C の評価エラー |
C が A に対しそのエラーで
|
Field
|
A |
|---|---|
| [[DFSAncestorIndex]] | 0 |
| [[Status]] | |
| [[AsyncEvaluationOrder]] | |
| [[AsyncParentModules]] | « » |
| [[PendingAsyncDependencies]] | 0 |
| [[EvaluationError]] | C の Evaluation Error |
その後 B がエラーなく完了。
|
Field
|
A | B |
|---|---|---|
| [[DFSAncestorIndex]] | 0 | 0 |
| [[Status]] | ||
| [[AsyncEvaluationOrder]] | 4 | 1 |
| [[AsyncParentModules]] | « » | « A » |
| [[PendingAsyncDependencies]] | 0 | 0 |
| [[EvaluationError]] | C の Evaluation Error |
Source Text Module Record は、
| フィールド名 | 値の型 | 意味 |
|---|---|---|
| [[ECMAScriptCode]] | Parse Node |
|
| [[Context]] |
ECMAScript 実行コンテキストまたは |
このモジュールに関連付けられる実行コンテキスト。環境初期化まで |
| [[ImportMeta]] |
Object または |
import.meta メタプロパティを通じて公開されるオブジェクト。アクセスされるまで |
| [[ImportEntries]] |
|
モジュールコードから導出された ImportEntry レコードのリスト。 |
| [[LocalExportEntries]] |
|
モジュール内部宣言に対応する ExportEntry のリスト。 |
| [[IndirectExportEntries]] |
|
モジュール内の再エクスポート import または export * as namespace 宣言に対応する ExportEntry のリスト。
|
| [[StarExportEntries]] |
|
export * 宣言(export * as namespace を除く)に対応する ExportEntry のリスト。
|
ImportEntry Record は単一の宣言的 import を要約する
| フィールド名 | 値の型 | 意味 |
|---|---|---|
| [[ModuleRequest]] |
|
|
| [[ImportName]] |
文字列または |
[[ModuleRequest]] が指すモジュールで束縛がエクスポートされる名前。 |
| [[LocalName]] | 文字列 | インポート値へローカルアクセスするための名前。 |
| 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 は単一の宣言的 export を要約する
| フィールド名 | 値の型 | 意味 |
|---|---|---|
| [[ExportName]] |
文字列または |
このモジュールがこの束縛をエクスポートする際の名前。 |
| [[ModuleRequest]] |
|
|
| [[ImportName]] |
文字列, |
[[ModuleRequest]] が指すモジュールがこの束縛をエクスポートする名前。export * as ns from "mod"、export * from "mod" に使用。
|
| [[LocalName]] |
文字列または |
モジュール内部からエクスポート値へアクセスするためのローカル名。内部で直接アクセスできない場合 |
| 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";
|
|
|
|
|
以下の定義は
The abstract operation ParseModule takes arguments sourceText (
export * from を通じて同じ束縛または名前空間を同じ名前で 2 回エクスポートしたことから生じる衝突は,await を含むかどうか」とする。実装は ParseModule 評価前にモジュールソースをパースし早期エラー解析を行ってもよいが、エラー報告は仕様が実際に ParseModule を行う時点まで遅延しなければならない。
以下は
The GetExportedNames concrete method of
export * 循環の開始点に到達。GetExportedNames は曖昧な star export の名前を除去も例外化もしない。
The ResolveExport concrete method of
ResolveExport は要求されたエクスポート名を最終的な定義モジュールとローカル束縛名へ解決する。定義モジュールは自身または import 先モジュール。resolveSet は循環 import/export 経路検出に使われ、既に同一 (module, exportName) ペアが存在すれば循環で
定義が見つかれば ResolvedBinding
It performs the following steps when called:
default エクスポートは明示的に定義されていない。default エクスポートは export * from "mod" 宣言によって供給されることはできない。* エクスポートが複数存在する。The InitializeEnvironment concrete method of
The ExecuteModule concrete method of
Synthetic Module Record は仕様によって定義されるモジュール情報を表す。エクスポート名は作成時に静的定義され、対応値は
| フィールド名 | 値の型 | 意味 |
|---|---|---|
| [[ExportNames]] | 文字列のリスト | モジュールのエクスポート名(重複なし)。 |
| [[EvaluationSteps]] | 評価時に実行する初期化ロジック。 |
The abstract operation CreateDefaultExportSyntheticModule takes argument defaultExport (ECMAScript 言語値) and returns
The abstract operation ParseJSONModule takes argument source (文字列) and returns
The abstract operation SetSyntheticModuleExport takes arguments module (
以下は
The LoadRequestedModules concrete method of takes optional argument hostDefined (任意の型) and returns Promise. It performs the following steps when called:
The GetExportedNames concrete method of takes optional argument exportStarSet (ソーステキストモジュールレコードのリスト) and returns 文字列のリスト. It performs the following steps when called:
The ResolveExport concrete method of takes argument exportName (文字列) and optional argument resolveSet ([[Module]](モジュールレコード)および [[ExportName]](文字列)フィールドを持つレコードのリスト) and returns
The Link concrete method of takes no arguments and returns
The Evaluate concrete method of takes no arguments and returns Promise. It performs the following steps when called:
The abstract operation GetImportedModule takes arguments referrer (
The host-defined abstract operation HostLoadImportedModule takes arguments referrer (
referrer が
<button type="button" onclick="import('./foo.mjs')">Click me</button>
をクリックすると、import() 式実行時点でアクティブなスクリプトやモジュールが存在しない。
HostLoadImportedModule の実装は以下要件に従う:
同じ referrer かつ
moduleRequest.[[Attributes]] に [[Key]]
実際の処理は
上記は type: "json" でインポートされた JSON モジュールをtype: "json" なしでの JSON モジュールサポートを禁止しない。
The abstract operation FinishLoadingImportedModule takes arguments referrer (
The abstract operation AllImportAttributesSupported takes argument attributes (
The host-defined abstract operation HostGetSupportedImportAttributes takes no arguments and returns 文字列リスト.
HostGetSupportedImportAttributes の実装は次の要件に従わなければならない:
HostGetSupportedImportAttributes のデフォルト実装は、新しい空リストを返すことである。
The abstract operation GetModuleNamespace takes argument module (
GetModuleNamespace は例外を投げない。解決不能な名前はこの時点では単に namespace から除外される。それらがすべてどこからも明示的に要求されない曖昧な star export でない限り、後で実際のリンクエラーにつながる。
The syntax-directed operation UNKNOWN takes UNPARSEABLE ARGUMENTS. It is defined piecewise over the following productions:
The syntax-directed operation UNKNOWN takes UNPARSEABLE ARGUMENTS. It is defined piecewise over the following productions:
The syntax-directed operation UNKNOWN takes UNPARSEABLE ARGUMENTS. It is defined piecewise over the following productions:
上記規則により
The syntax-directed operation UNKNOWN takes UNPARSEABLE ARGUMENTS.
ExportedBindings は
It is defined piecewise over the following productions:
The syntax-directed operation UNKNOWN takes UNPARSEABLE ARGUMENTS.
ExportedNames は
It is defined piecewise over the following productions:
The syntax-directed operation UNKNOWN takes UNPARSEABLE ARGUMENTS. It is defined piecewise over the following productions:
The syntax-directed operation UNKNOWN takes UNPARSEABLE ARGUMENTS. It is defined piecewise over the following productions:
The syntax-directed operation UNKNOWN takes UNPARSEABLE ARGUMENTS. It is defined piecewise over the following productions: