From d76829fe0f162b66ee87c4dc3c9ee147384371d6 Mon Sep 17 00:00:00 2001
From: Daniel Ehrenberg User agents that support JavaScript must also implement the BigInt proposal. User agents that support JavaScript must also implement the JavaScript standard library proposal.
+ The following terms are defined there, and used in this specification: A script is one of two possible A script is one of three possible structs. All scripts have: Either a Script Record, for classic
scripts; a Source Text Module Record, for module scripts; or null. In the former two cases, it represents a parsed script;
+ script">module scripts; a Synthetic Module Record for JSON module scripts; or null. In the
+ former two cases, it represents a parsed script; in the third case, a parsed JSON document;
null represents a failure parsing.RequestCredentials
enumerationRequestDestination
enumerationfetch()
method
+
@@ -86655,7 +86665,7 @@ interface ApplicationCache : EventTarget {
Definitions
-
@@ -86668,7 +86678,9 @@ interface ApplicationCache : EventTarget {
A JSON module script is another type of script. It has no additional items.
+The active script is determined by the following algorithm:
response's status is not an ok status
The result of extracting a MIME type from - response's header list is not a - JavaScript MIME type
+Let type be the result of extracting a + MIME type from response's header + list.
-For historical reasons, fetching a - classic script does not include MIME type checking. In contrast, module scripts will - fail to load if they are not of a correct MIME type.
-For historical reasons, fetching a + classic script does not include MIME type checking. In contrast, module scripts' + interpretation is driven by their MIME type, and they will fail to load if they are not of + a supported MIME type.
-Let source text be the result of UTF-8 - decoding response's body.
Let module script be null.
Let module script be the result of creating a module script given - source text, module map settings object, response's url, and options.
If type is a JavaScript MIME type, then:
+ +Let source text be the result of UTF-8 + decoding response's body.
Set module script to the result of creating a module script given + source text, module map settings object, response's url, and options.
If type is a JSON MIME type, then:
+ +Set module script to a new JSON module script that this algorithm + will subsequently initialize.
Let json be the result of running consume body on + response with JSON.
+ +If this throws an exception, catch it, and set module script's + parse error to that exception.
+If no exception was thrown, set module script's record to CreateSyntheticModule + (« "default" », the following steps, module map settings object's + Realm, json) with the + following steps given module as an argument:
+Set moduleMap[url] to module
@@ -121954,6 +122008,9 @@ INSERT INTERFACES HERE
Setting the attribute to an ASCII case-insensitive match for the string
- "module
" means that the script is a module script, to be
- interpreted according to the JavaScript Module top-level
- production. Module scripts are not affected by the defer
- attribute, but are affected by the async
attribute
- (regardless of the state of the src
attribute).
module
" means that the script is a module script.
+ If it has a JavaScript MIME type, or if the script is embedded inline, then it will
+ be interpreted as a JavaScript module script according to the JavaScript Module top-level production. Module scripts are not affected by
+ the defer
attribute, but are affected by the async
attribute (regardless of the state of the src
attribute).
Setting the attribute to any other value means that the script is a data
block, which is not processed. None of the script
attributes (except HTMLScriptElement
Classic scripts and module
- scripts may either be embedded inline or may be imported from an external file using the
- src
attribute, which if specified gives the URL
- of the external script resource to use. If src
is specified,
- it must be a valid non-empty URL potentially surrounded by spaces. The contents of
- inline script
elements, or the external script resource, must conform with the
- requirements of the JavaScript specification's Script or Module productions, for classic
- scripts and module scripts respectively.
Classic scripts and JavaScript module scripts may be embedded inline, and all script types may be
+ imported from an external file using the src
attribute, which if
+ specified gives the URL of the external script resource to use. If src
is specified, it must be a valid non-empty URL
+ potentially surrounded by spaces. The contents of inline script
elements,
+ or the external script resource, must conform with the requirements of the JavaScript
+ specification's Script or Module
+ productions, for classic scripts and
+ JavaScript module scripts respectively.
+
When used to include data blocks, the data must be embedded
inline, the format of the data must be given using the type
@@ -58041,7 +58045,7 @@ o............A....e
The following sample shows how a script
element can be used to include an
- external module script.
+ external JavaScript module script.
<script type="module" src="app.mjs"></script>
@@ -58052,37 +58056,37 @@ o............A....e
Additionally, if code from another script
element in the same Window
imports the module from app.mjs
(e.g. via import
- "./app.mjs";
), then the same module script created by the
+ "./app.mjs";), then the same JavaScript module script created by the
former script
element will be imported.
This example shows how to include a module script for modern user agents, and a - classic script for older user agents:
+This example shows how to include a JavaScript module script for modern user + agents, and a classic script for older user agents:
<script type="module" src="app.mjs"></script>
<script nomodule src="classic-app-bundle.js"></script>
- In modern user agents that support module scripts, the
- script
element with the nomodule
attribute
- will be ignored, and the script
element with a type
of "module
" will be fetched and
- evaluated (as a module script). Conversely, older user agents will ignore the
+
In modern user agents that support JavaScript module
+ scripts, the script
element with the nomodule
attribute will be ignored, and the
script
element with a type
of "module
", as that is an unknown script type for them — but they will have no
- problem fetching and evaluating the other script
element (as a classic
- script), since they do not implement the nomodule
attribute.
script
element with a
+ type
of "module
", as that is an
+ unknown script type for them — but they will have no problem fetching and evaluating the other
+ script
element (as a classic script), since they do not implement the
+ nomodule
attribute.
The following sample shows how a script
element can be used to write an inline
- module script that performs a number of substitutions on the document's text, in
- order to make for a more interesting reading experience (e.g. on a news site): JavaScript module script that performs a number of substitutions on the document's
+ text, in order to make for a more interesting reading experience (e.g. on a news site):
<script type="module">
@@ -58114,12 +58118,12 @@ o............A....e
walkAllTextNodeDescendants(document.body, substitute);
</script>
- Some notable features gained by using a module script include the ability to import functions
- from other JavaScript modules, strict mode by default, and how top-level declarations do not
- introduce new properties onto the global object. Also note that no matter where
- this script
element appears in the document, it will not be evaluated until both
- document parsing has complete and its dependency (dom-utils.mjs
) has been
- fetched and evaluated.
Some notable features gained by using a JavaScript module script include the ability to import
+ functions from other JavaScript modules, strict mode by default, and how top-level declarations
+ do not introduce new properties onto the global object. Also note that no matter
+ where this script
element appears in the document, it will not be evaluated until
+ both document parsing has complete and its dependency (dom-utils.mjs
) has
+ been fetched and evaluated.
module
"Let script be the result of creating a module script using - source text, settings object, base URL, and - options.
Let script be the result of creating a JavaScript module + script using source text, settings object, base + URL, and options.
If this returns null, set the script's script to null and return; the script is ready.
Either a Script Record, for classic - scripts; a Source Text Module Record, for module scripts; a Synthetic Module Record for JSON module scripts; or null. In the - all but the last case, it represents a parsed script; - null represents a failure parsing.
A JSON module script is another type of script. It has no additional items.
+This specification defines multiple types of module scripts. None of these have additional + items
+ +A JavaScript module script represents a JavaScript Source + Text Module Record.
A JSON module script represents a parsed JSON document.
+ As JSON documents do import dependent modules and do not throw exceptions on execution, + the fetch options and base URL of a JSON module script + are always null.The active script is determined by the following algorithm:
@@ -87398,9 +87411,10 @@ interface ApplicationCache : EventTarget {Let source text be the result of UTF-8 decoding response's body.
Set module script to the result of creating a module script given - source text, module map settings object, response's url, and options.
Set module script to the result of creating a JavaScript module + script given source text, module map settings object, + response's url, and + options.
If type is a JSON MIME type, then:
Set module script to a new JSON module script that this algorithm - will subsequently initialize.
Let json be the result of running consume body on - response with JSON.
- -If this throws an exception, catch it, and set module script's - parse error to that exception.
-If no exception was thrown, set module script's record to CreateSyntheticModule - (« "default" », the following steps, module map settings object's - Realm, json) with the - following steps given module as an argument:
-Set module script to the result of creating a JSON module + script given response and module map settings object.
Let record be module script's record.
If record.[[RequestedModules]] is empty, +
If record is not a Cyclic Module Record, or if + record.[[RequestedModules]] is empty, asynchronously complete this algorithm with module script.
Let urls be a new empty list.
Let options be the descendant script fetch options for module script's fetch options.
Assert: options is not null, as module script is a JavaScript + module script.
For each url in urls, perform the internal module script graph fetching procedure given url, @@ -87585,38 +87583,43 @@ interface ApplicationCache : EventTarget { then return moduleScript's parse error.
Let childSpecifiers be the value of moduleScript's record's [[RequestedModules]] internal slot.
If moduleScript's record is a + Cyclic Module Record:
Let childURLs be the list obtained by calling - resolve a module specifier once for each item of childSpecifiers, given - moduleScript's base URL and that item. - (None of these will ever fail, as otherwise moduleScript would have been marked as - itself having a parse error.)
Let childSpecifiers be the value of moduleScript's record's [[RequestedModules]] internal slot.
Let childModules be the list obtained by getting each value in moduleMap whose key is given by an - item of childURLs.
Let childURLs be the list obtained by calling + resolve a module specifier once for each item of childSpecifiers, given + moduleScript's base URL and that item. + (None of these will ever fail, as otherwise moduleScript would have been marked as + itself having a parse error.)
For each childModule of - childModules:
+Let childModules be the list obtained by getting each value in moduleMap whose key is given by an + item of childURLs.
Assert: childModule is a module script (i.e., it is not "fetching
" or null); by now all module
- scripts in the graph rooted at moduleScript will have successfully been
- fetched.
For each childModule of + childModules:
-If discoveredSet already contains - childModule, continue.
Assert: childModule is a module script (i.e., it is not "fetching
" or null); by now all module
+ scripts in the graph rooted at moduleScript will have successfully been
+ fetched.
Let childParseError be the result of finding the first parse - error given childModule and discoveredSet.
If discoveredSet already contains + childModule, continue.
If childParseError is not null, return childParseError.
Let childParseError be the result of finding the first parse + error given childModule and discoveredSet.
If childParseError is not null, return childParseError.
Return null.
Return script.
To create a module script, given a - JavaScript string source, an environment settings object - settings, a URL baseURL, and some script fetch - options options:
+To create a JavaScript module script, + given a JavaScript string source, an environment settings + object settings, a URL baseURL, and some script + fetch options options:
If scripting is disabled for @@ -87757,6 +87760,54 @@ interface ApplicationCache : EventTarget {
Return script.
To create a JSON module script, given a response response and an environment settings + object settings:
+ +Let script be a new JSON module script that this algorithm will + subsequently initialize.
Set script's settings object to settings.
Set script's base URL and + fetch options to null.
Set script's parse error and + error to rethrow to null.
Let json be the result of running consume body on + response with JSON.
+ +If this throws an exception, catch it, set script's parse error to that exception, and return + script.
+Set script's record to the result + of creating a synthetic + module record with a default export of json with settings.
Return script.
To create a synthetic module record with a default export of a JavaScript value + value with an environment settings object settings:
+ +Return CreateSyntheticModule(« "default" », the following steps, + settings's Realm, + value) with the following steps given module as an argument:
+ +To run a classic script given a classic script @@ -88868,6 +88919,9 @@ import "https://example.com/foo/../module2.mjs";
Set base URL to referencing script's base URL.
Assert: base URL is not null, as referencing script is a + classic script or a JavaScript module script.
Set fetch options to the descendant script fetch options for referencing script's fetch options.
Assert: Neither base URL nor fetch options is null, as + referencing script is a classic script or a JavaScript module + script.
Assert: is not null, since this algorithm is always called + from a classic script or a JavaScript module script.
As explained above for HostResolveImportedModule, in the common @@ -89006,6 +89067,10 @@ import "https://example.com/foo/../module2.mjs";
Let module script be moduleRecord.[[HostDefined]].
Assert: module script's base + URL is not null, as module script is a JavaScript module + script.
Let urlString be module script's base URL, serialized.
Let base URL be initiating script's base URL.
Assert: base URL is not null, as initiating script is a + classic script or a JavaScript module script.
Let fetch options be a script fetch options whose cryptographic nonce is initiating
From 42a5675b27099a851b44b7cbb338a945d830e27f Mon Sep 17 00:00:00 2001
From: Daniel Ehrenberg
If moduleScript's record is a - Cyclic Module Record:
If moduleScript's record is a + Cyclic Module Record:
-Let childSpecifiers be the value of moduleScript's record's [[RequestedModules]] internal slot.
Let childSpecifiers be the value of moduleScript's record's [[RequestedModules]] internal slot.
Let childURLs be the list obtained by calling - resolve a module specifier once for each item of childSpecifiers, given - moduleScript's base URL and that item. - (None of these will ever fail, as otherwise moduleScript would have been marked as - itself having a parse error.)
Let childURLs be the list obtained by calling + resolve a module specifier once for each item of childSpecifiers, given + moduleScript's base URL and that item. + (None of these will ever fail, as otherwise moduleScript would have been marked as + itself having a parse error.)
Let childModules be the list obtained by getting each value in moduleMap whose key is given by an - item of childURLs.
Let childModules be the list obtained by getting each value in moduleMap whose key is given by an + item of childURLs.
For each childModule of - childModules:
+For each childModule of + childModules:
-Assert: childModule is a module script (i.e., it is not "fetching
" or null); by now all module
- scripts in the graph rooted at moduleScript will have successfully been
- fetched.
Assert: childModule is a module script (i.e., it is not "fetching
" or null); by now all module
+ scripts in the graph rooted at moduleScript will have successfully been
+ fetched.
If discoveredSet already contains - childModule, continue.
If discoveredSet already contains + childModule, continue.
Let childParseError be the result of finding the first parse - error given childModule and discoveredSet.
Let childParseError be the result of finding the first parse + error given childModule and discoveredSet.
If childParseError is not null, return childParseError.
If childParseError is not null, return childParseError.
Return null.
Either a Script Record, for classic - scripts; a Source Text Module Record, for JavaScript module scripts; a Synthetic Module Record for JSON module scripts; or null. In all but the last case, it - represents a parsed script; null represents a failure parsing.
One of the following:
+ +Script Record, for classic + scripts
a Source Text Module Record, for JavaScript module scripts
Synthetic Module Record, for JSON module + scripts
null, representing a parsing failure.
This specification defines multiple types of module scripts. None of these have additional - items
+ items.A JavaScript module script represents a JavaScript Source Text Module Record.
A JSON module script represents a parsed JSON document.
+A JSON module script represents a parsed JSON document. As JSON documents do import dependent modules and do not throw exceptions on execution, the fetch options and base URL of a JSON module script - are always null.
The active script is determined by the following algorithm:
@@ -89001,9 +89012,6 @@ import "https://example.com/foo/../module2.mjs";Assert: Neither base URL nor fetch options is null, as referencing script is a classic script or a JavaScript module script.
Assert: is not null, since this algorithm is always called - from a classic script or a JavaScript module script.
As explained above for HostResolveImportedModule, in the common
From 712d7e6f5313f6c46b3891ed08c63c8f3c8c49ac Mon Sep 17 00:00:00 2001
From: Daniel Ehrenberg Set script's parse error and
error to rethrow to null. Let json be the result of running consume body on
- response with JSON. Let jsonPromise be the result of running consume body on
+ response with JSON. If this throws an exception, catch it, set script's parse error to that exception, and return
- script. Upon rejection of jsonPromise with reason, set script's
+ parse error to reason, and return
+ script. Set script's record to the result
- of creating a synthetic
- module record with a default export of json with settings. Upon fulfillment of jsonPromise with json: Return script. Set script's record to the result
+ of creating a synthetic
+ module record with a default export of json with settings. Return script. To create a synthetic module record with a default export of a JavaScript value
From 888fe2b9400faac9610b1cb0c85b363649f45f8d Mon Sep 17 00:00:00 2001
From: Daniel Ehrenberg The external script resource of JSON module scripts
+ must conform to the requirements of the JSON specification . When used to include data blocks, the data must be embedded
inline, the format of the data must be given using the One of the following: Script Record, for classic
+ a script record, for classic
scripts a Source Text Module Record, for JavaScript module scripts Synthetic Module Record, for JSON module
+ a Synthetic Module Record, for JSON module
scripts null, representing a parsing failure. A JavaScript module script represents a JavaScript Source
- Text Module Record. A JSON module script represents a parsed JSON document.
As JSON documents do import dependent modules and do not throw exceptions on execution,
@@ -87413,7 +87418,12 @@ interface ApplicationCache : EventTarget {
a supported MIME type. Let module script be null. Let module script be null. If the resource does not have a MIME type which HTML knows how to handle
+ as a module, then module script will be null, which is interpreted as failure. If type is a JavaScript MIME type, then: If type is a JSON MIME type, then: Let source text be the result of UTF-8
+ decoding response's body. Set module script to the result of creating a JSON module
- script given response and module map settings object. Return script. To create a JSON module script, given a response response and an environment settings
- object settings: To create a JSON module script, given a
+ string source and an environment settings object settings: Let script be a new JSON module script that this algorithm will
@@ -87789,24 +87801,20 @@ interface ApplicationCache : EventTarget {
Set script's parse error and
error to rethrow to null. Let jsonPromise be the result of running consume body on
- response with JSON. Upon rejection of jsonPromise with reason, set script's
- parse error to reason, and return
- script. Upon fulfillment of jsonPromise with json: Set script's record to the result
- of creating a synthetic
- module record with a default export of json with settings. Let json be ? Call(%JSONParse%, undefined,
+ « source »). Return script. If this throws an exception, set script's parse error to that exception, and return
+ script. Set script's record to the result
+ of creating a synthetic
+ module record with a default export of json with settings. Return script. To create a synthetic module record with a default export of a JavaScript value
From d9e4d84f7f393812874d32a1e068197c6c9db34b Mon Sep 17 00:00:00 2001
From: Domenic Denicola
+
+
type
attribute, and the contents of the script
element must conform to the requirements
@@ -86684,13 +86689,13 @@ interface ApplicationCache : EventTarget {
-
.
+
-
+