Skip to content

Commit a09ed54

Browse files
authored
feat(core): add Deno.core.loadExtScript() for lazy-loaded scripts (#33739)
Adds `Deno.core.loadExtScript(specifier)` — a new API for loading extension scripts on demand without going through V8's ES module infrastructure. **Motivation:** Benchmarking showed that ES modules add ~31% snapshot size overhead and ~4x slower serialization/deserialization compared to plain scripts.
1 parent ea33a86 commit a09ed54

57 files changed

Lines changed: 396 additions & 99 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

ext/cache/01_cache.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
// Copyright 2018-2026 the Deno authors. MIT license.
2-
import { primordials } from "ext:core/mod.js";
2+
import { core, primordials } from "ext:core/mod.js";
33
import {
44
op_cache_delete,
55
op_cache_match,
@@ -19,7 +19,7 @@ const {
1919
TypeError,
2020
} = primordials;
2121

22-
import * as webidl from "ext:deno_webidl/00_webidl.js";
22+
const webidl = core.loadExtScript("ext:deno_webidl/00_webidl.js");
2323
import {
2424
Request,
2525
RequestPrototype,

ext/crypto/00_crypto.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -88,9 +88,9 @@ const {
8888
WeakMapPrototypeSet,
8989
} = primordials;
9090

91-
import * as webidl from "ext:deno_webidl/00_webidl.js";
91+
const webidl = core.loadExtScript("ext:deno_webidl/00_webidl.js");
9292
import { createFilteredInspectProxy } from "ext:deno_web/01_console.js";
93-
import { DOMException } from "ext:deno_web/01_dom_exception.js";
93+
const { DOMException } = core.loadExtScript("ext:deno_web/01_dom_exception.js");
9494
import { kKeyObject } from "ext:deno_node/internal/crypto/constants.ts";
9595

9696
const supportedNamedCurves = ["P-256", "P-384", "P-521"];

ext/fetch/20_headers.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
/// <reference path="../../cli/tsc/dts/lib.deno_fetch.d.ts" />
1010
/// <reference lib="esnext" />
1111

12-
import { primordials } from "ext:core/mod.js";
12+
import { core, primordials } from "ext:core/mod.js";
1313
const {
1414
ArrayIsArray,
1515
ArrayPrototypePush,
@@ -28,7 +28,7 @@ const {
2828
TypeError,
2929
} = primordials;
3030

31-
import * as webidl from "ext:deno_webidl/00_webidl.js";
31+
const webidl = core.loadExtScript("ext:deno_webidl/00_webidl.js");
3232
import { markNotSerializable } from "ext:deno_web/13_message_port.js";
3333
import {
3434
byteLowerCase,

ext/fetch/21_formdata.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
/// <reference lib="esnext" />
1111

1212
import { core, primordials } from "ext:core/mod.js";
13-
import * as webidl from "ext:deno_webidl/00_webidl.js";
13+
const webidl = core.loadExtScript("ext:deno_webidl/00_webidl.js");
1414
import {
1515
Blob,
1616
BlobPrototype,

ext/fetch/22_body.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ const {
3737
Uint8Array,
3838
} = primordials;
3939

40-
import * as webidl from "ext:deno_webidl/00_webidl.js";
40+
const webidl = core.loadExtScript("ext:deno_webidl/00_webidl.js");
4141
import {
4242
parseUrlEncoded,
4343
URLSearchParamsPrototype,

ext/fetch/23_request.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ const {
2424
TypeError,
2525
} = primordials;
2626

27-
import * as webidl from "ext:deno_webidl/00_webidl.js";
27+
const webidl = core.loadExtScript("ext:deno_webidl/00_webidl.js");
2828
import { createFilteredInspectProxy } from "ext:deno_web/01_console.js";
2929
import { HTTP_TOKEN_CODE_POINT_RE } from "ext:deno_web/00_infra.js";
3030
import { URL } from "ext:deno_web/00_url.js";
@@ -45,7 +45,7 @@ import {
4545
newSignal,
4646
signalAbort,
4747
} from "ext:deno_web/03_abort_signal.js";
48-
import { DOMException } from "ext:deno_web/01_dom_exception.js";
48+
const { DOMException } = core.loadExtScript("ext:deno_web/01_dom_exception.js");
4949
import { markNotSerializable } from "ext:deno_web/13_message_port.js";
5050
const { internalRidSymbol } = core;
5151

ext/fetch/23_response.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
/// <reference lib="esnext" />
1212

1313
import { core, primordials } from "ext:core/mod.js";
14-
import * as webidl from "ext:deno_webidl/00_webidl.js";
14+
const webidl = core.loadExtScript("ext:deno_webidl/00_webidl.js");
1515
import { createFilteredInspectProxy } from "ext:deno_web/01_console.js";
1616
import {
1717
byteLowerCase,

ext/fetch/26_fetch.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ const {
3838
TypedArrayPrototypeGetSymbolToStringTag,
3939
} = primordials;
4040

41-
import * as webidl from "ext:deno_webidl/00_webidl.js";
41+
const webidl = core.loadExtScript("ext:deno_webidl/00_webidl.js");
4242
import { byteLowerCase } from "ext:deno_web/00_infra.js";
4343
import {
4444
errorReadableStream,

ext/fetch/27_eventsource.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,10 @@ const {
2020
SymbolFor,
2121
} = primordials;
2222

23-
import * as webidl from "ext:deno_webidl/00_webidl.js";
23+
const webidl = core.loadExtScript("ext:deno_webidl/00_webidl.js");
2424
import { createFilteredInspectProxy } from "ext:deno_web/01_console.js";
2525
import { URL } from "ext:deno_web/00_url.js";
26-
import { DOMException } from "ext:deno_web/01_dom_exception.js";
26+
const { DOMException } = core.loadExtScript("ext:deno_web/01_dom_exception.js");
2727
import {
2828
defineEventHandler,
2929
EventTarget,

ext/image/01_image.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
// Copyright 2018-2026 the Deno authors. MIT license.
22

3-
import { internals, primordials } from "ext:core/mod.js";
3+
import { core, internals, primordials } from "ext:core/mod.js";
44
import { ImageBitmap, op_create_image_bitmap } from "ext:core/ops";
5-
import * as webidl from "ext:deno_webidl/00_webidl.js";
6-
import { DOMException } from "ext:deno_web/01_dom_exception.js";
5+
const webidl = core.loadExtScript("ext:deno_webidl/00_webidl.js");
6+
const { DOMException } = core.loadExtScript("ext:deno_web/01_dom_exception.js");
77
import { createFilteredInspectProxy } from "ext:deno_web/01_console.js";
88
import { BlobPrototype } from "ext:deno_web/09_file.js";
99
import { sniffImage } from "ext:deno_web/01_mimesniff.js";

0 commit comments

Comments
 (0)