summaryrefslogtreecommitdiff
path: root/runtime/js/99_main.js
diff options
context:
space:
mode:
Diffstat (limited to 'runtime/js/99_main.js')
-rw-r--r--runtime/js/99_main.js208
1 files changed, 172 insertions, 36 deletions
diff --git a/runtime/js/99_main.js b/runtime/js/99_main.js
index 36f08dce5..0496da9e7 100644
--- a/runtime/js/99_main.js
+++ b/runtime/js/99_main.js
@@ -23,6 +23,7 @@ import {
} from "ext:core/ops";
const {
ArrayPrototypeFilter,
+ ArrayPrototypeForEach,
ArrayPrototypeIncludes,
ArrayPrototypeMap,
DateNow,
@@ -35,6 +36,7 @@ const {
ObjectDefineProperty,
ObjectHasOwn,
ObjectKeys,
+ ObjectGetOwnPropertyDescriptor,
ObjectPrototypeIsPrototypeOf,
ObjectSetPrototypeOf,
PromisePrototypeThen,
@@ -747,26 +749,93 @@ function bootstrapMainRuntime(runtimeOptions, warmup = false) {
// Removes the obsoleted `Temporal` API.
// https://github.com/tc39/proposal-temporal/pull/2895
// https://github.com/tc39/proposal-temporal/pull/2914
- if (typeof Temporal.Instant.fromEpochSeconds === "undefined") {
+ // https://github.com/tc39/proposal-temporal/pull/2925
+ if (typeof globalThis.Temporal.Instant.fromEpochSeconds === "undefined") {
throw "V8 removes obsoleted Temporal API now, no need to delete them!";
}
- delete Temporal.Instant.fromEpochSeconds;
- delete Temporal.Instant.fromEpochMicroseconds;
- delete Temporal.Instant.prototype.epochSeconds;
- delete Temporal.Instant.prototype.epochMicroseconds;
- delete Temporal.PlainDateTime.prototype.withPlainDate;
- delete Temporal.PlainDateTime.prototype.toPlainYearMonth;
- delete Temporal.PlainDateTime.prototype.toPlainMonthDay;
- delete Temporal.PlainTime.prototype.toPlainDateTime;
- delete Temporal.PlainTime.prototype.toZonedDateTime;
- delete Temporal.TimeZone.prototype.getNextTransition;
- delete Temporal.TimeZone.prototype.getPreviousTransition;
- delete Temporal.ZonedDateTime.prototype.withPlainDate;
- delete Temporal.ZonedDateTime.prototype.toPlainYearMonth;
- delete Temporal.ZonedDateTime.prototype.toPlainMonthDay;
- delete Temporal.Now.zonedDateTime;
- delete Temporal.Now.plainDateTime;
- delete Temporal.Now.plainDate;
+ delete globalThis.Temporal.Instant.fromEpochSeconds;
+ delete globalThis.Temporal.Instant.fromEpochMicroseconds;
+ delete globalThis.Temporal.Instant.prototype.epochSeconds;
+ delete globalThis.Temporal.Instant.prototype.epochMicroseconds;
+ delete globalThis.Temporal.Instant.prototype.toZonedDateTime;
+ delete globalThis.Temporal.PlainDate.prototype.getISOFiels; // weird
+ delete globalThis.Temporal.PlainDate.prototype.getISOFields;
+ delete globalThis.Temporal.PlainDateTime.prototype.withPlainDate;
+ delete globalThis.Temporal.PlainDateTime.prototype.toPlainYearMonth;
+ delete globalThis.Temporal.PlainDateTime.prototype.toPlainMonthDay;
+ delete globalThis.Temporal.PlainDateTime.prototype.getISOFields;
+ delete globalThis.Temporal.PlainMonthDay.prototype.getISOFields;
+ delete globalThis.Temporal.PlainTime.prototype.calendar;
+ delete globalThis.Temporal.PlainTime.prototype.toPlainDateTime;
+ delete globalThis.Temporal.PlainTime.prototype.toZonedDateTime;
+ delete globalThis.Temporal.PlainTime.prototype.getISOFields;
+ delete globalThis.Temporal.PlainYearMonth.prototype.getISOFields;
+ delete globalThis.Temporal.ZonedDateTime.prototype.epochSeconds;
+ delete globalThis.Temporal.ZonedDateTime.prototype.epochMicroseconds;
+ delete globalThis.Temporal.ZonedDateTime.prototype.withPlainDate;
+ delete globalThis.Temporal.ZonedDateTime.prototype.toPlainYearMonth;
+ delete globalThis.Temporal.ZonedDateTime.prototype.toPlainMonthDay;
+ delete globalThis.Temporal.ZonedDateTime.prototype.getISOFields;
+ delete globalThis.Temporal.Now.zonedDateTime;
+ delete globalThis.Temporal.Now.plainDateTime;
+ delete globalThis.Temporal.Now.plainDate;
+ delete globalThis.Temporal.Calendar;
+ delete globalThis.Temporal.TimeZone;
+
+ // Modify `Temporal.Calendar` to calendarId string
+ ArrayPrototypeForEach([
+ globalThis.Temporal.PlainDate,
+ globalThis.Temporal.PlainDateTime,
+ globalThis.Temporal.PlainMonthDay,
+ globalThis.Temporal.PlainYearMonth,
+ globalThis.Temporal.ZonedDateTime,
+ ], (target) => {
+ const getCalendar =
+ ObjectGetOwnPropertyDescriptor(target.prototype, "calendar").get;
+ ObjectDefineProperty(target.prototype, "calendarId", {
+ __proto__: null,
+ get: function calendarId() {
+ return FunctionPrototypeCall(getCalendar, this).id;
+ },
+ enumerable: false,
+ configurable: true,
+ });
+ delete target.prototype.calendar;
+ });
+
+ // Modify `Temporal.TimeZone` to timeZoneId string
+ {
+ const getTimeZone = ObjectGetOwnPropertyDescriptor(
+ globalThis.Temporal.ZonedDateTime.prototype,
+ "timeZone",
+ ).get;
+ ObjectDefineProperty(
+ globalThis.Temporal.ZonedDateTime.prototype,
+ "timeZoneId",
+ {
+ __proto__: null,
+ get: function timeZoneId() {
+ return FunctionPrototypeCall(getTimeZone, this).id;
+ },
+ enumerable: false,
+ configurable: true,
+ },
+ );
+ delete globalThis.Temporal.ZonedDateTime.prototype.timeZone;
+ }
+ {
+ const nowTimeZone = globalThis.Temporal.Now.timeZone;
+ ObjectDefineProperty(globalThis.Temporal.Now, "timeZoneId", {
+ __proto__: null,
+ value: function timeZoneId() {
+ return nowTimeZone().id;
+ },
+ writable: true,
+ enumerable: false,
+ configurable: true,
+ });
+ delete globalThis.Temporal.Now.timeZone;
+ }
}
// Setup `Deno` global - we're actually overriding already existing global
@@ -889,26 +958,93 @@ function bootstrapWorkerRuntime(
// Removes the obsoleted `Temporal` API.
// https://github.com/tc39/proposal-temporal/pull/2895
// https://github.com/tc39/proposal-temporal/pull/2914
- if (typeof Temporal.Instant.fromEpochSeconds === "undefined") {
+ // https://github.com/tc39/proposal-temporal/pull/2925
+ if (typeof globalThis.Temporal.Instant.fromEpochSeconds === "undefined") {
throw "V8 removes obsoleted Temporal API now, no need to delete them!";
}
- delete Temporal.Instant.fromEpochSeconds;
- delete Temporal.Instant.fromEpochMicroseconds;
- delete Temporal.Instant.prototype.epochSeconds;
- delete Temporal.Instant.prototype.epochMicroseconds;
- delete Temporal.PlainDateTime.prototype.withPlainDate;
- delete Temporal.PlainDateTime.prototype.toPlainYearMonth;
- delete Temporal.PlainDateTime.prototype.toPlainMonthDay;
- delete Temporal.PlainTime.prototype.toPlainDateTime;
- delete Temporal.PlainTime.prototype.toZonedDateTime;
- delete Temporal.TimeZone.prototype.getNextTransition;
- delete Temporal.TimeZone.prototype.getPreviousTransition;
- delete Temporal.ZonedDateTime.prototype.withPlainDate;
- delete Temporal.ZonedDateTime.prototype.toPlainYearMonth;
- delete Temporal.ZonedDateTime.prototype.toPlainMonthDay;
- delete Temporal.Now.zonedDateTime;
- delete Temporal.Now.plainDateTime;
- delete Temporal.Now.plainDate;
+ delete globalThis.Temporal.Instant.fromEpochSeconds;
+ delete globalThis.Temporal.Instant.fromEpochMicroseconds;
+ delete globalThis.Temporal.Instant.prototype.epochSeconds;
+ delete globalThis.Temporal.Instant.prototype.epochMicroseconds;
+ delete globalThis.Temporal.Instant.prototype.toZonedDateTime;
+ delete globalThis.Temporal.PlainDate.prototype.getISOFiels; // weird
+ delete globalThis.Temporal.PlainDate.prototype.getISOFields;
+ delete globalThis.Temporal.PlainDateTime.prototype.withPlainDate;
+ delete globalThis.Temporal.PlainDateTime.prototype.toPlainYearMonth;
+ delete globalThis.Temporal.PlainDateTime.prototype.toPlainMonthDay;
+ delete globalThis.Temporal.PlainDateTime.prototype.getISOFields;
+ delete globalThis.Temporal.PlainMonthDay.prototype.getISOFields;
+ delete globalThis.Temporal.PlainTime.prototype.calendar;
+ delete globalThis.Temporal.PlainTime.prototype.toPlainDateTime;
+ delete globalThis.Temporal.PlainTime.prototype.toZonedDateTime;
+ delete globalThis.Temporal.PlainTime.prototype.getISOFields;
+ delete globalThis.Temporal.PlainYearMonth.prototype.getISOFields;
+ delete globalThis.Temporal.ZonedDateTime.prototype.epochSeconds;
+ delete globalThis.Temporal.ZonedDateTime.prototype.epochMicroseconds;
+ delete globalThis.Temporal.ZonedDateTime.prototype.withPlainDate;
+ delete globalThis.Temporal.ZonedDateTime.prototype.toPlainYearMonth;
+ delete globalThis.Temporal.ZonedDateTime.prototype.toPlainMonthDay;
+ delete globalThis.Temporal.ZonedDateTime.prototype.getISOFields;
+ delete globalThis.Temporal.Now.zonedDateTime;
+ delete globalThis.Temporal.Now.plainDateTime;
+ delete globalThis.Temporal.Now.plainDate;
+ delete globalThis.Temporal.Calendar;
+ delete globalThis.Temporal.TimeZone;
+
+ // Modify `Temporal.Calendar` to calendarId string
+ ArrayPrototypeForEach([
+ globalThis.Temporal.PlainDate,
+ globalThis.Temporal.PlainDateTime,
+ globalThis.Temporal.PlainMonthDay,
+ globalThis.Temporal.PlainYearMonth,
+ globalThis.Temporal.ZonedDateTime,
+ ], (target) => {
+ const getCalendar =
+ ObjectGetOwnPropertyDescriptor(target.prototype, "calendar").get;
+ ObjectDefineProperty(target.prototype, "calendarId", {
+ __proto__: null,
+ get: function calendarId() {
+ return FunctionPrototypeCall(getCalendar, this).id;
+ },
+ enumerable: false,
+ configurable: true,
+ });
+ delete target.prototype.calendar;
+ });
+
+ // Modify `Temporal.TimeZone` to timeZoneId string
+ {
+ const getTimeZone = ObjectGetOwnPropertyDescriptor(
+ globalThis.Temporal.ZonedDateTime.prototype,
+ "timeZone",
+ ).get;
+ ObjectDefineProperty(
+ globalThis.Temporal.ZonedDateTime.prototype,
+ "timeZoneId",
+ {
+ __proto__: null,
+ get: function timeZoneId() {
+ return FunctionPrototypeCall(getTimeZone, this).id;
+ },
+ enumerable: false,
+ configurable: true,
+ },
+ );
+ delete globalThis.Temporal.ZonedDateTime.prototype.timeZone;
+ }
+ {
+ const nowTimeZone = globalThis.Temporal.Now.timeZone;
+ ObjectDefineProperty(globalThis.Temporal.Now, "timeZoneId", {
+ __proto__: null,
+ value: function timeZoneId() {
+ return nowTimeZone().id;
+ },
+ writable: true,
+ enumerable: false,
+ configurable: true,
+ });
+ delete globalThis.Temporal.Now.timeZone;
+ }
}
// Setup `Deno` global - we're actually overriding already existing global