Temporal
bash
npm install @time-provider/core @time-provider/plugin-temporalNode.js and browsers don't ship the TC39 Temporal proposal natively yet, so plugin-temporal assumes a global Temporal is already available — seed it once at your app's/test's entry point with @js-temporal/polyfill until it lands natively:
ts
import { Temporal } from "@js-temporal/polyfill";
if (!("Temporal" in globalThis)) {
(globalThis as { Temporal?: unknown }).Temporal = Temporal;
}ts
// production
import { createTimeProvider } from "@time-provider/core";
import { plugin } from "@time-provider/plugin-temporal";
const timeProvider = createTimeProvider.for(plugin).withTimezone("Australia/Sydney").create();
timeProvider.clock.utcNow(); // Temporal.ZonedDateTime, in UTC
timeProvider.clock.localNow(); // Temporal.ZonedDateTime, in Australia/Sydneyts
// tests — same date type, from the /deterministic subpath
import { createTimeProvider } from "@time-provider/core/deterministic";
import { plugin } from "@time-provider/plugin-temporal/deterministic";
const timeProvider = createTimeProvider.for(plugin).asFixed().withFixedTime(0).create();- Date type:
Temporal.ZonedDateTime. - Peer dependency: none declared — bring your own global
Temporal(native once browsers/Node ship it, or@js-temporal/polyfilltoday). - Timezone support: full —
ISystemPlugin/ITimeProvider(orIDeterministicPluginon the/deterministicside), real IANA zones, natively part ofTemporal.ZonedDateTime.
The Playground polyfills Temporal this same way before loading this plugin.