diff options
Diffstat (limited to 'runtime/js')
-rw-r--r-- | runtime/js/99_main.js | 208 |
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 |