Gå til indhold

Specifikationsdækning

Phasis følger den aktuelle ECMAScript-specifikation (ES2024+) og holder øje med TC39-forslag på Stage 3 og derover. Denne side er et læsevenligt register over det, der faktisk er implementeret.

Sprog

Funktion Status
Leksikale deklarationer (let, const) med TDZ ✅
Blok-, funktions- og modulomfang ✅
Pilefunktioner (med leksikalsk this) ✅
Standardparametre, restparametre, spread ✅
Destrukturering (array, objekt, indlejret, standardværdier, rest) ✅
Template literals, taggede templates ✅
Beregnede egenskabsnavne ✅
Kortforms-egenskaber og metoder ✅
Klasser — konstruktører, metoder, getters/setters, static ✅
Klassefelter (public, private, static) ✅
Private metoder og accessors ✅
super i metoder og konstruktører ✅
Decorators (Stage 3) ✅
Statiske initialiseringsblokke ✅
Valgfri chaining (?.), nullish coalescing (??) ✅
Logiske tildelingsoperatorer (&&=, ||=, ??=) ✅
Numeriske separatorer (1_000_000) ✅
BigInt-litteraler (123n) og operatorer ✅
Asynkrone funktioner, asynkrone generatorer, await på øverste niveau ✅
Generatorer (synkrone og asynkrone) ✅
for…of, for…in, for await…of ✅
Iteratorer og iterables (Symbol.iterator) ✅
Symbolprimitiver og velkendte symboler ✅
ES-moduler (import / export, dynamisk import()) ✅
import.meta ✅
import attributes (Stage 3) ✅
Strict mode + ældre Annex B-adfærd ✅
Regulære udtryk (/u, /v, /d, navngivne grupper, lookbehind) ✅
Automatisk indsættelse af semikolon (ASI) ✅
Hashbang-grammatik (#!/usr/bin/env phasis) ✅
Korrekte tail calls i strict mode (ES2015, krævet af specifikationen) ✅

Standardbibliotek

Grundlæggende

Objekt Dækning
Object fuld — keys, values, entries, assign, create, freeze, seal, getOwnPropertyDescriptor(s), setPrototypeOf, getOwnPropertyNames, getOwnPropertySymbols, hasOwn, groupBy, fromEntries osv.
Array fuld — alle prototypemetoder, inklusive at, flatMap, flat, findLast, findLastIndex, toReversed, toSorted, toSpliced, with, group, groupToMap
String fuld — at, codePointAt, match, matchAll, replaceAll, padStart, padEnd, trimStart, trimEnd, isWellFormed, toWellFormed
Number fuld — isFinite, isInteger, isNaN, isSafeInteger, EPSILON, MAX_SAFE_INTEGER osv.
BigInt fuld — vilkårlig præcision via bcmath
Boolean fuld
Math fuld — alle metoder og særtilfælde for NaN / Infinity / -0
JSON fuld — parse, stringify, brugerdefinerede replacers, reviver, indrykning
Symbol fuld — for, keyFor, alle velkendte symboler, Symbol.toPrimitive
Function fuld — semantik for call, apply, bind, length, name, prototype

Samlinger

Objekt Dækning
Map fuld — inklusive groupBy og live-iteration
Set fuld — inklusive intersection, union, difference, symmetricDifference, isSubsetOf, isSupersetOf, isDisjointFrom
WeakMap, WeakSet, WeakRef, FinalizationRegistry fuld

Asynkron

Objekt Dækning
Promise fuld — all, race, any, allSettled, withResolvers, asynkron iteration
AsyncIterator, AsyncGenerator fuld
Planlægning af mikrotasks ✅

Binære data

Objekt Dækning
ArrayBuffer, SharedArrayBuffer fuld
DataView fuld — getBigInt64, setBigInt64 osv.
Int8Array, Uint8Array, Uint8ClampedArray, Int16Array, Uint16Array, Int32Array, Uint32Array, BigInt64Array, BigUint64Array, Float16Array, Float32Array, Float64Array fuld
Atomics — add, sub, and, or, xor, compareExchange, exchange, isLockFree, load, notify, pause, store, wait, waitAsync fuld (kun én agent)

Refleksion og proxies

Objekt Dækning
Proxy alle 13 fælder, kan gøres ugyldige
Reflect alle 14 statiske metoder

Fejl

Objekt Dækning
Error, TypeError, RangeError, ReferenceError, SyntaxError, URIError, EvalError fuld
AggregateError fuld
SuppressedError (Stage 3, eksplicit håndtering af ressourcer) fuld

Datoer og tid

Objekt Dækning
Date fuld
Temporal (Stage 3) fuld — Now, Instant, PlainDate, PlainTime, PlainDateTime, PlainYearMonth, PlainMonthDay, ZonedDateTime, Duration, TimeZone, Calendar (inkl. hebraisk, kinesisk, Dangi, etiopisk osv.)

Internationalisering

Objekt Dækning
Intl.Locale, Intl.Collator, Intl.DateTimeFormat, Intl.NumberFormat, Intl.PluralRules, Intl.RelativeTimeFormat, Intl.ListFormat, Intl.DisplayNames, Intl.Segmenter fuld (bruger PHP's intl-udvidelse, når den er tilgængelig)

Ressourcehåndtering

Objekt Dækning
DisposableStack, AsyncDisposableStack (Stage 3) fuld
Symbol.dispose, Symbol.asyncDispose fuld
using / await using-deklarationer fuld

Andet

Objekt Dækning
RegExp (inkl. /v-mængdenotation, navngivne captures, lookaround, sticky/global-flag) fuld
Iterator-hjælpere (Stage 3) — map, filter, take, drop, flatMap, reduce, toArray, forEach, some, every, find fuld
ShadowRealm (Stage 3) fuld
globalThis ✅

Webplatform-API'er (WHATWG / W3C, ikke TC39)

Ud over ren ECMAScript leveres flere lagdelte pakker med Web-API'er fra Phasis, som virkelige JS-biblioteker forhåndstjekker for. Se Web-API'er for den fulde dækning og overensstemmelse for hvert område.

Pakke Globale objekter WPT
Webplatform URL, URLSearchParams, URLPattern, TextEncoder, TextDecoder, atob, btoa, structuredClone, performance, console, setTimeout / setInterval / queueMicrotask, reportError, self (alias for globalThis), DOMException 100 %
Fetch fetch, Request, Response, Headers, Body-mixin, AbortController, AbortSignal, Blob, File, FormData, EventTarget, Event, fuld WHATWG Streams (ReadableStream, WritableStream, TransformStream, køstrategier, BYOB), CompressionStream / DecompressionStream (zlib + valgfri brotli via ext-brotli), navigator 100 %¹
Crypto crypto.getRandomValues, crypto.randomUUID, fuld SubtleCrypto (digest, HMAC, AES-GCM/CBC/CTR, RSA-OAEP/PSS/PKCS1, ECDSA P-256/384/521, ECDH, HKDF, PBKDF2) 100 %
WebSocket WebSocket (konstruktør + RFC 6455-frame-codec, udskiftelig transport via setWebSocketTransport) 100 %
XHR XMLHttpRequest + XMLHttpRequestUpload + ProgressEvent (lagdelt oven på fetch-transporten, så politik-hooks gælder) 100 %
Hændelsesløkke setTimeout, setInterval, clearTimeout, clearInterval, queueMicrotask, AsyncContext (Stage 3) ikke relevant (oracle-testet)

¹ Brotlitilfældene i komprimerings-fixtures, som kræver ext-brotli, samt tilfældene, der sender SharedArrayBuffer-baseret input (EXPECTED_FAILURES i tests/Wpt/WptTest.php), er undtaget fra de tilladte undertests.

Alle andre importerede Web Platform Tests består — se Web-API'er for oversigten over overensstemmelse.

Det, der endnu ikke er implementeret

  • SharedArrayBuffer-arbejdersemantik ud over én agent — atomisk notifikation på tværs af flere rigtige OS-tråde kræver pcntl og er ikke på planen. Atomare operationer med én agent fungerer.
  • Intl.Segmenter med grafemklynger, der kræver ICU 76+ — afhænger af versionen af intl-udvidelsen i værtsmiljøets PHP.

Versionering

Phasis følger semver. Versionslinjen følger udkast til ECMAScript-specifikationen:

Phasis-version Specifikationsmål Stage 3-forslag
0.x ES2024 decorators, Temporal, eksplicit ressourcehåndtering, iterator-hjælpere, mængdemetoder

En opgradering til 1.0 afhænger af, at alle Stage 4-forslag i ES2025-udkastet er implementeret, og at semantikken for tømning af Promise-køen er stabil.