mirror of
https://github.com/denoland/deno.git
synced 2024-11-22 15:06:54 -05:00
refactor: use primordials in extensions/web (#11273)
Co-authored-by: Divy Srivastava <dj.srivastava23@gmail.com>
This commit is contained in:
parent
f139a0cc11
commit
1aac47720b
7 changed files with 131 additions and 54 deletions
4
core/internal.d.ts
vendored
4
core/internal.d.ts
vendored
|
@ -834,6 +834,10 @@ declare namespace __bootstrap {
|
|||
export const TypeErrorLength: typeof TypeError.length;
|
||||
export const TypeErrorName: typeof TypeError.name;
|
||||
export const TypeErrorPrototype: typeof TypeError.prototype;
|
||||
export const TypedArrayFrom: (
|
||||
constructor: Uint8ArrayConstructor,
|
||||
arrayLike: ArrayLike<number>,
|
||||
) => Uint8Array;
|
||||
export const TypedArrayPrototypeCopyWithin: UncurryThis<
|
||||
typeof Uint8Array.prototype.copyWithin
|
||||
>;
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
|
||||
// @ts-check
|
||||
/// <reference path="../../core/lib.deno_core.d.ts" />
|
||||
/// <reference path="../../core/internal.d.ts" />
|
||||
/// <reference path="../web/internal.d.ts" />
|
||||
/// <reference path="../web/lib.deno_web.d.ts" />
|
||||
|
||||
|
@ -10,6 +11,15 @@
|
|||
((window) => {
|
||||
const core = window.Deno.core;
|
||||
const { DOMException } = window.__bootstrap.domException;
|
||||
const {
|
||||
ArrayBuffer,
|
||||
ArrayBufferIsView,
|
||||
DataView,
|
||||
TypedArrayPrototypeSlice,
|
||||
TypeError,
|
||||
WeakMap,
|
||||
WeakMapPrototypeSet,
|
||||
} = window.__bootstrap.primordials;
|
||||
|
||||
const objectCloneMemo = new WeakMap();
|
||||
|
||||
|
@ -20,7 +30,8 @@
|
|||
_cloneConstructor,
|
||||
) {
|
||||
// this function fudges the return type but SharedArrayBuffer is disabled for a while anyway
|
||||
return srcBuffer.slice(
|
||||
return TypedArrayPrototypeSlice(
|
||||
srcBuffer,
|
||||
srcByteOffset,
|
||||
srcByteOffset + srcLength,
|
||||
);
|
||||
|
@ -38,10 +49,10 @@
|
|||
value.byteLength,
|
||||
ArrayBuffer,
|
||||
);
|
||||
objectCloneMemo.set(value, cloned);
|
||||
WeakMapPrototypeSet(objectCloneMemo, value, cloned);
|
||||
return cloned;
|
||||
}
|
||||
if (ArrayBuffer.isView(value)) {
|
||||
if (ArrayBufferIsView(value)) {
|
||||
const clonedBuffer = structuredClone(value.buffer);
|
||||
// Use DataViewConstructor type purely for type-checking, can be a
|
||||
// DataView or TypedArray. They use the same constructor signature,
|
||||
|
|
|
@ -1,9 +1,22 @@
|
|||
// Copyright 2018-2021 the Deno authors. All rights reserved. MIT license.
|
||||
"use strict";
|
||||
|
||||
// @ts-check
|
||||
/// <reference path="../../core/internal.d.ts" />
|
||||
|
||||
((window) => {
|
||||
const webidl = window.__bootstrap.webidl;
|
||||
const { setIsTrusted, defineEventHandler } = window.__bootstrap.event;
|
||||
const {
|
||||
Boolean,
|
||||
Set,
|
||||
SetPrototypeAdd,
|
||||
SetPrototypeClear,
|
||||
SetPrototypeDelete,
|
||||
Symbol,
|
||||
SymbolToStringTag,
|
||||
TypeError,
|
||||
} = window.__bootstrap.primordials;
|
||||
|
||||
const add = Symbol("add");
|
||||
const signalAbort = Symbol("signalAbort");
|
||||
|
@ -22,7 +35,7 @@
|
|||
}
|
||||
|
||||
[add](algorithm) {
|
||||
this.#abortAlgorithms.add(algorithm);
|
||||
SetPrototypeAdd(this.#abortAlgorithms, algorithm);
|
||||
}
|
||||
|
||||
[signalAbort]() {
|
||||
|
@ -33,14 +46,14 @@
|
|||
for (const algorithm of this.#abortAlgorithms) {
|
||||
algorithm();
|
||||
}
|
||||
this.#abortAlgorithms.clear();
|
||||
SetPrototypeClear(this.#abortAlgorithms);
|
||||
const event = new Event("abort");
|
||||
setIsTrusted(event, true);
|
||||
this.dispatchEvent(event);
|
||||
}
|
||||
|
||||
[remove](algorithm) {
|
||||
this.#abortAlgorithms.delete(algorithm);
|
||||
SetPrototypeDelete(this.#abortAlgorithms, algorithm);
|
||||
}
|
||||
|
||||
constructor(key = null) {
|
||||
|
@ -55,7 +68,7 @@
|
|||
return Boolean(this.#aborted);
|
||||
}
|
||||
|
||||
get [Symbol.toStringTag]() {
|
||||
get [SymbolToStringTag]() {
|
||||
return "AbortSignal";
|
||||
}
|
||||
}
|
||||
|
@ -74,7 +87,7 @@
|
|||
this.#signal[signalAbort]();
|
||||
}
|
||||
|
||||
get [Symbol.toStringTag]() {
|
||||
get [SymbolToStringTag]() {
|
||||
return "AbortController";
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,7 +1,16 @@
|
|||
// Copyright 2018-2021 the Deno authors. All rights reserved. MIT license.
|
||||
"use strict";
|
||||
|
||||
// @ts-check
|
||||
/// <reference path="../../core/internal.d.ts" />
|
||||
|
||||
((window) => {
|
||||
const { EventTarget } = window;
|
||||
const {
|
||||
Symbol,
|
||||
SymbolToStringTag,
|
||||
TypeError,
|
||||
} = window.__bootstrap.primordials;
|
||||
|
||||
const illegalConstructorKey = Symbol("illegalConstructorKey");
|
||||
|
||||
|
@ -13,7 +22,7 @@
|
|||
super();
|
||||
}
|
||||
|
||||
get [Symbol.toStringTag]() {
|
||||
get [SymbolToStringTag]() {
|
||||
return "Window";
|
||||
}
|
||||
}
|
||||
|
@ -26,7 +35,7 @@
|
|||
super();
|
||||
}
|
||||
|
||||
get [Symbol.toStringTag]() {
|
||||
get [SymbolToStringTag]() {
|
||||
return "WorkerGlobalScope";
|
||||
}
|
||||
}
|
||||
|
@ -39,7 +48,7 @@
|
|||
super();
|
||||
}
|
||||
|
||||
get [Symbol.toStringTag]() {
|
||||
get [SymbolToStringTag]() {
|
||||
return "DedicatedWorkerGlobalScope";
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
// Copyright 2018-2021 the Deno authors. All rights reserved. MIT license.
|
||||
|
||||
// @ts-check
|
||||
/// <reference path="../../core/internal.d.ts" />
|
||||
/// <reference path="../webidl/internal.d.ts" />
|
||||
/// <reference path="../web/internal.d.ts" />
|
||||
/// <reference lib="esnext" />
|
||||
|
@ -14,6 +15,13 @@
|
|||
forgivingBase64Decode,
|
||||
} = window.__bootstrap.infra;
|
||||
const { DOMException } = window.__bootstrap.domException;
|
||||
const {
|
||||
ArrayPrototypeMap,
|
||||
StringPrototypeCharCodeAt,
|
||||
ArrayPrototypeJoin,
|
||||
StringFromCharCode,
|
||||
TypedArrayFrom,
|
||||
} = window.__bootstrap.primordials;
|
||||
|
||||
/**
|
||||
* @param {string} data
|
||||
|
@ -26,10 +34,11 @@
|
|||
});
|
||||
|
||||
const uint8Array = forgivingBase64Decode(data);
|
||||
const result = [...uint8Array]
|
||||
.map((byte) => String.fromCharCode(byte))
|
||||
.join("");
|
||||
return result;
|
||||
const result = ArrayPrototypeMap(
|
||||
[...uint8Array],
|
||||
(byte) => StringFromCharCode(byte),
|
||||
);
|
||||
return ArrayPrototypeJoin(result, "");
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -43,8 +52,8 @@
|
|||
prefix,
|
||||
context: "Argument 1",
|
||||
});
|
||||
const byteArray = [...data].map((char) => {
|
||||
const charCode = char.charCodeAt(0);
|
||||
const byteArray = ArrayPrototypeMap([...data], (char) => {
|
||||
const charCode = StringPrototypeCharCodeAt(char, 0);
|
||||
if (charCode > 0xff) {
|
||||
throw new DOMException(
|
||||
"The string to be encoded contains characters outside of the Latin1 range.",
|
||||
|
@ -53,7 +62,7 @@
|
|||
}
|
||||
return charCode;
|
||||
});
|
||||
return forgivingBase64Encode(Uint8Array.from(byteArray));
|
||||
return forgivingBase64Encode(TypedArrayFrom(Uint8Array, byteArray));
|
||||
}
|
||||
|
||||
window.__bootstrap.base64 = {
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
|
||||
// @ts-check
|
||||
/// <reference path="../../core/lib.deno_core.d.ts" />
|
||||
/// <reference path="../../core/internal.d.ts" />
|
||||
/// <reference path="../webidl/internal.d.ts" />
|
||||
/// <reference path="../fetch/lib.deno_fetch.d.ts" />
|
||||
/// <reference path="../web/internal.d.ts" />
|
||||
|
@ -13,6 +14,17 @@
|
|||
((window) => {
|
||||
const core = Deno.core;
|
||||
const webidl = window.__bootstrap.webidl;
|
||||
const {
|
||||
ArrayBufferIsView,
|
||||
PromiseReject,
|
||||
PromiseResolve,
|
||||
StringPrototypeCharCodeAt,
|
||||
StringPrototypeSlice,
|
||||
SymbolToStringTag,
|
||||
TypedArrayPrototypeSubarray,
|
||||
TypedArrayPrototypeSlice,
|
||||
Uint8Array,
|
||||
} = window.__bootstrap.primordials;
|
||||
|
||||
class TextDecoder {
|
||||
/** @type {string} */
|
||||
|
@ -95,7 +107,7 @@
|
|||
}
|
||||
|
||||
try {
|
||||
if (ArrayBuffer.isView(input)) {
|
||||
if (ArrayBufferIsView(input)) {
|
||||
input = new Uint8Array(
|
||||
input.buffer,
|
||||
input.byteOffset,
|
||||
|
@ -116,7 +128,7 @@
|
|||
}
|
||||
}
|
||||
|
||||
get [Symbol.toStringTag]() {
|
||||
get [SymbolToStringTag]() {
|
||||
return "TextDecoder";
|
||||
}
|
||||
}
|
||||
|
@ -172,7 +184,7 @@
|
|||
return core.opSync("op_encoding_encode_into", source, destination);
|
||||
}
|
||||
|
||||
get [Symbol.toStringTag]() {
|
||||
get [SymbolToStringTag]() {
|
||||
return "TextEncoder";
|
||||
}
|
||||
}
|
||||
|
@ -213,9 +225,9 @@
|
|||
if (decoded) {
|
||||
controller.enqueue(decoded);
|
||||
}
|
||||
return Promise.resolve();
|
||||
return PromiseResolve();
|
||||
} catch (err) {
|
||||
return Promise.reject(err);
|
||||
return PromiseReject(err);
|
||||
}
|
||||
},
|
||||
flush: (controller) => {
|
||||
|
@ -224,9 +236,9 @@
|
|||
if (final) {
|
||||
controller.enqueue(final);
|
||||
}
|
||||
return Promise.resolve();
|
||||
return PromiseResolve();
|
||||
} catch (err) {
|
||||
return Promise.reject(err);
|
||||
return PromiseReject(err);
|
||||
}
|
||||
},
|
||||
});
|
||||
|
@ -263,7 +275,7 @@
|
|||
return this.#transform.writable;
|
||||
}
|
||||
|
||||
get [Symbol.toStringTag]() {
|
||||
get [SymbolToStringTag]() {
|
||||
return "TextDecoderStream";
|
||||
}
|
||||
}
|
||||
|
@ -286,19 +298,22 @@
|
|||
if (this.#pendingHighSurrogate !== null) {
|
||||
chunk = this.#pendingHighSurrogate + chunk;
|
||||
}
|
||||
const lastCodeUnit = chunk.charCodeAt(chunk.length - 1);
|
||||
const lastCodeUnit = StringPrototypeCharCodeAt(
|
||||
chunk,
|
||||
chunk.length - 1,
|
||||
);
|
||||
if (0xD800 <= lastCodeUnit && lastCodeUnit <= 0xDBFF) {
|
||||
this.#pendingHighSurrogate = chunk.slice(-1);
|
||||
chunk = chunk.slice(0, -1);
|
||||
this.#pendingHighSurrogate = StringPrototypeSlice(chunk, -1);
|
||||
chunk = StringPrototypeSlice(chunk, 0, -1);
|
||||
} else {
|
||||
this.#pendingHighSurrogate = null;
|
||||
}
|
||||
if (chunk) {
|
||||
controller.enqueue(core.encode(chunk));
|
||||
}
|
||||
return Promise.resolve();
|
||||
return PromiseResolve();
|
||||
} catch (err) {
|
||||
return Promise.reject(err);
|
||||
return PromiseReject(err);
|
||||
}
|
||||
},
|
||||
flush: (controller) => {
|
||||
|
@ -306,9 +321,9 @@
|
|||
if (this.#pendingHighSurrogate !== null) {
|
||||
controller.enqueue(new Uint8Array([0xEF, 0xBF, 0xBD]));
|
||||
}
|
||||
return Promise.resolve();
|
||||
return PromiseResolve();
|
||||
} catch (err) {
|
||||
return Promise.reject(err);
|
||||
return PromiseReject(err);
|
||||
}
|
||||
},
|
||||
});
|
||||
|
@ -333,7 +348,7 @@
|
|||
return this.#transform.writable;
|
||||
}
|
||||
|
||||
get [Symbol.toStringTag]() {
|
||||
get [SymbolToStringTag]() {
|
||||
return "TextEncoderStream";
|
||||
}
|
||||
}
|
||||
|
@ -377,14 +392,16 @@
|
|||
if (BOMEncoding === "UTF-8") start = 3;
|
||||
else start = 2;
|
||||
}
|
||||
return new TextDecoder(encoding).decode(bytes.slice(start));
|
||||
return new TextDecoder(encoding).decode(
|
||||
TypedArrayPrototypeSlice(bytes, start),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {Uint8Array} bytes
|
||||
*/
|
||||
function BOMSniff(bytes) {
|
||||
const BOM = bytes.subarray(0, 3);
|
||||
const BOM = TypedArrayPrototypeSubarray(bytes, 0, 3);
|
||||
if (BOM[0] === 0xEF && BOM[1] === 0xBB && BOM[2] === 0xBF) {
|
||||
return "UTF-8";
|
||||
}
|
||||
|
|
|
@ -1,9 +1,23 @@
|
|||
// Copyright 2018-2021 the Deno authors. All rights reserved. MIT license.
|
||||
"use strict";
|
||||
|
||||
/// <reference path="../../core/internal.d.ts" />
|
||||
|
||||
((window) => {
|
||||
const { URL } = window.__bootstrap.url;
|
||||
const { DOMException } = window.__bootstrap.domException;
|
||||
const {
|
||||
Error,
|
||||
ObjectDefineProperties,
|
||||
ReferenceError,
|
||||
Symbol,
|
||||
SymbolFor,
|
||||
SymbolToStringTag,
|
||||
TypeError,
|
||||
WeakMap,
|
||||
WeakMapPrototypeGet,
|
||||
WeakMapPrototypeSet,
|
||||
} = window.__bootstrap.primordials;
|
||||
|
||||
const locationConstructorKey = Symbol("locationConstuctorKey");
|
||||
|
||||
|
@ -20,7 +34,7 @@
|
|||
const url = new URL(href);
|
||||
url.username = "";
|
||||
url.password = "";
|
||||
Object.defineProperties(this, {
|
||||
ObjectDefineProperties(this, {
|
||||
hash: {
|
||||
get() {
|
||||
return url.hash;
|
||||
|
@ -167,7 +181,7 @@
|
|||
},
|
||||
enumerable: true,
|
||||
},
|
||||
[Symbol.for("Deno.privateCustomInspect")]: {
|
||||
[SymbolFor("Deno.privateCustomInspect")]: {
|
||||
value: function (inspect) {
|
||||
const object = {
|
||||
hash: this.hash,
|
||||
|
@ -187,8 +201,8 @@
|
|||
}
|
||||
}
|
||||
|
||||
Object.defineProperties(Location.prototype, {
|
||||
[Symbol.toStringTag]: {
|
||||
ObjectDefineProperties(Location.prototype, {
|
||||
[SymbolToStringTag]: {
|
||||
value: "Location",
|
||||
configurable: true,
|
||||
},
|
||||
|
@ -204,14 +218,14 @@
|
|||
const url = new URL(href);
|
||||
url.username = "";
|
||||
url.password = "";
|
||||
workerLocationUrls.set(this, url);
|
||||
WeakMapPrototypeSet(workerLocationUrls, this, url);
|
||||
}
|
||||
}
|
||||
|
||||
Object.defineProperties(WorkerLocation.prototype, {
|
||||
ObjectDefineProperties(WorkerLocation.prototype, {
|
||||
hash: {
|
||||
get() {
|
||||
const url = workerLocationUrls.get(this);
|
||||
const url = WeakMapPrototypeGet(workerLocationUrls, this);
|
||||
if (url == null) {
|
||||
throw new TypeError("Illegal invocation.");
|
||||
}
|
||||
|
@ -222,7 +236,7 @@
|
|||
},
|
||||
host: {
|
||||
get() {
|
||||
const url = workerLocationUrls.get(this);
|
||||
const url = WeakMapPrototypeGet(workerLocationUrls, this);
|
||||
if (url == null) {
|
||||
throw new TypeError("Illegal invocation.");
|
||||
}
|
||||
|
@ -233,7 +247,7 @@
|
|||
},
|
||||
hostname: {
|
||||
get() {
|
||||
const url = workerLocationUrls.get(this);
|
||||
const url = WeakMapPrototypeGet(workerLocationUrls, this);
|
||||
if (url == null) {
|
||||
throw new TypeError("Illegal invocation.");
|
||||
}
|
||||
|
@ -244,7 +258,7 @@
|
|||
},
|
||||
href: {
|
||||
get() {
|
||||
const url = workerLocationUrls.get(this);
|
||||
const url = WeakMapPrototypeGet(workerLocationUrls, this);
|
||||
if (url == null) {
|
||||
throw new TypeError("Illegal invocation.");
|
||||
}
|
||||
|
@ -255,7 +269,7 @@
|
|||
},
|
||||
origin: {
|
||||
get() {
|
||||
const url = workerLocationUrls.get(this);
|
||||
const url = WeakMapPrototypeGet(workerLocationUrls, this);
|
||||
if (url == null) {
|
||||
throw new TypeError("Illegal invocation.");
|
||||
}
|
||||
|
@ -266,7 +280,7 @@
|
|||
},
|
||||
pathname: {
|
||||
get() {
|
||||
const url = workerLocationUrls.get(this);
|
||||
const url = WeakMapPrototypeGet(workerLocationUrls, this);
|
||||
if (url == null) {
|
||||
throw new TypeError("Illegal invocation.");
|
||||
}
|
||||
|
@ -277,7 +291,7 @@
|
|||
},
|
||||
port: {
|
||||
get() {
|
||||
const url = workerLocationUrls.get(this);
|
||||
const url = WeakMapPrototypeGet(workerLocationUrls, this);
|
||||
if (url == null) {
|
||||
throw new TypeError("Illegal invocation.");
|
||||
}
|
||||
|
@ -288,7 +302,7 @@
|
|||
},
|
||||
protocol: {
|
||||
get() {
|
||||
const url = workerLocationUrls.get(this);
|
||||
const url = WeakMapPrototypeGet(workerLocationUrls, this);
|
||||
if (url == null) {
|
||||
throw new TypeError("Illegal invocation.");
|
||||
}
|
||||
|
@ -299,7 +313,7 @@
|
|||
},
|
||||
search: {
|
||||
get() {
|
||||
const url = workerLocationUrls.get(this);
|
||||
const url = WeakMapPrototypeGet(workerLocationUrls, this);
|
||||
if (url == null) {
|
||||
throw new TypeError("Illegal invocation.");
|
||||
}
|
||||
|
@ -310,7 +324,7 @@
|
|||
},
|
||||
toString: {
|
||||
value: function toString() {
|
||||
const url = workerLocationUrls.get(this);
|
||||
const url = WeakMapPrototypeGet(workerLocationUrls, this);
|
||||
if (url == null) {
|
||||
throw new TypeError("Illegal invocation.");
|
||||
}
|
||||
|
@ -320,11 +334,11 @@
|
|||
enumerable: true,
|
||||
writable: true,
|
||||
},
|
||||
[Symbol.toStringTag]: {
|
||||
[SymbolToStringTag]: {
|
||||
value: "WorkerLocation",
|
||||
configurable: true,
|
||||
},
|
||||
[Symbol.for("Deno.privateCustomInspect")]: {
|
||||
[SymbolFor("Deno.privateCustomInspect")]: {
|
||||
value: function (inspect) {
|
||||
const object = {
|
||||
hash: this.hash,
|
||||
|
|
Loading…
Reference in a new issue