사양 지원 범위
Phasis는 최신 ECMAScript 사양(ES2024+)을 대상으로 하며 Stage 3 이상인 TC39 제안도 추적합니다. 이 페이지는 실제로 제공되는 기능을 사람이 읽기 쉽게 정리한 색인입니다.
언어
| 기능 |
상태 |
TDZ가 적용되는 어휘적 선언(let, const) |
✅ |
| 블록 스코프, 함수 스코프, 모듈 스코프 |
✅ |
어휘적 this를 사용하는 화살표 함수 |
✅ |
| 기본 매개변수, 나머지 매개변수, 스프레드 |
✅ |
| 구조 분해(배열, 객체, 중첩, 기본값, 나머지) |
✅ |
| 템플릿 리터럴, 태그 템플릿 |
✅ |
| 계산된 속성 이름 |
✅ |
| 단축 속성 및 메서드 |
✅ |
| 클래스 — 생성자, 메서드, getter/setter, static |
✅ |
| 클래스 필드(공개, 비공개, static) |
✅ |
| 비공개 메서드 및 접근자 |
✅ |
메서드 및 생성자의 super |
✅ |
| 데코레이터(Stage 3) |
✅ |
| static 초기화 블록 |
✅ |
선택적 체이닝(?.), 널 병합(??) |
✅ |
논리 할당 연산자(&&=, ||=, ??=) |
✅ |
숫자 구분자(1_000_000) |
✅ |
BigInt 리터럴(123n) 및 연산자 |
✅ |
| 비동기 함수, 비동기 제너레이터, 최상위 await |
✅ |
| 제너레이터(동기 및 비동기) |
✅ |
for…of, for…in, for await…of |
✅ |
| 반복자 및 반복 가능 객체(Symbol.iterator) |
✅ |
| Symbol 원시 값 및 잘 알려진 심볼 |
✅ |
ES 모듈(import / export, 동적 import()) |
✅ |
import.meta |
✅ |
import attributes(Stage 3) |
✅ |
| strict 모드 및 Annex B 레거시 동작 |
✅ |
정규 표현식(/u, /v, /d, 명명된 그룹, 후방 탐색) |
✅ |
| 자동 세미콜론 삽입(ASI) |
✅ |
해시뱅 문법(#!/usr/bin/env phasis) |
✅ |
| strict 모드의 적절한 꼬리 호출(ES2015, 사양에서 요구) |
✅ |
표준 라이브러리
기본 요소
| 객체 |
지원 범위 |
Object |
전체 — keys, values, entries, assign, create, freeze, seal, getOwnPropertyDescriptor(s), setPrototypeOf, getOwnPropertyNames, getOwnPropertySymbols, hasOwn, groupBy, fromEntries 등 |
Array |
전체 — at, flatMap, flat, findLast, findLastIndex, toReversed, toSorted, toSpliced, with, group, groupToMap을 포함한 모든 프로토타입 메서드 |
String |
전체 — at, codePointAt, match, matchAll, replaceAll, padStart, padEnd, trimStart, trimEnd, isWellFormed, toWellFormed |
Number |
전체 — isFinite, isInteger, isNaN, isSafeInteger, EPSILON, MAX_SAFE_INTEGER 등 |
BigInt |
전체 — bcmath를 통한 임의 정밀도 지원 |
Boolean |
전체 |
Math |
전체 — NaN / Infinity / -0의 모든 메서드 및 특수 사례 |
JSON |
전체 — parse, stringify, 사용자 지정 replacer, reviver, 들여쓰기 |
Symbol |
전체 — for, keyFor, 모든 잘 알려진 심볼, Symbol.toPrimitive |
Function |
전체 — call, apply, bind, length, name, prototype 의미론 |
컬렉션
| 객체 |
지원 범위 |
Map |
전체 — groupBy 및 실시간 반복 포함 |
Set |
전체 — intersection, union, difference, symmetricDifference, isSubsetOf, isSupersetOf, isDisjointFrom 포함 |
WeakMap, WeakSet, WeakRef, FinalizationRegistry |
전체 |
비동기
| 객체 |
지원 범위 |
Promise |
전체 — all, race, any, allSettled, withResolvers, 비동기 반복 포함 |
AsyncIterator, AsyncGenerator |
전체 |
| 마이크로태스크 스케줄링 |
✅ |
바이너리 데이터
| 객체 |
지원 범위 |
ArrayBuffer, SharedArrayBuffer |
전체 |
DataView |
전체 — getBigInt64, setBigInt64 등 |
Int8Array, Uint8Array, Uint8ClampedArray, Int16Array, Uint16Array, Int32Array, Uint32Array, BigInt64Array, BigUint64Array, Float16Array, Float32Array, Float64Array |
전체 |
Atomics — add, sub, and, or, xor, compareExchange, exchange, isLockFree, load, notify, pause, store, wait, waitAsync |
전체(단일 에이전트 전용) |
리플렉션 및 프록시
| 객체 |
적용 범위 |
Proxy |
취소 가능한 트랩 13개 전체 |
Reflect |
정적 메서드 14개 전체 |
오류
| 객체 |
적용 범위 |
Error, TypeError, RangeError, ReferenceError, SyntaxError, URIError, EvalError |
전체 |
AggregateError |
전체 |
SuppressedError (Stage 3 명시적 리소스 관리) |
전체 |
날짜 및 시간
| 객체 |
적용 범위 |
Date |
전체 |
Temporal (Stage 3) |
전체 — Now, Instant, PlainDate, PlainTime, PlainDateTime, PlainYearMonth, PlainMonthDay, ZonedDateTime, Duration, TimeZone, Calendar (히브리어, 중국어, Dangi, 에티오피아 달력 등 포함) |
국제화
| 객체 |
적용 범위 |
Intl.Locale, Intl.Collator, Intl.DateTimeFormat, Intl.NumberFormat, Intl.PluralRules, Intl.RelativeTimeFormat, Intl.ListFormat, Intl.DisplayNames, Intl.Segmenter |
전체 (사용 가능한 경우 PHP의 intl 확장에 위임) |
리소스 관리
| 객체 |
적용 범위 |
DisposableStack, AsyncDisposableStack (Stage 3) |
전체 |
Symbol.dispose, Symbol.asyncDispose |
전체 |
using / await using 선언 |
전체 |
기타
| 객체 |
적용 범위 |
RegExp (/v 집합 표기법, 명명된 캡처, 전후 탐색, sticky/global 플래그 포함) |
전체 |
Iterator 헬퍼(Stage 3) — map, filter, take, drop, flatMap, reduce, toArray, forEach, some, every, find |
전체 |
ShadowRealm (Stage 3) |
전체 |
globalThis |
✅ |
순수 ECMAScript 외에도 Phasis는 실제 JS 라이브러리가 사전 검사하는 여러 계층형 Web API 팩을 제공합니다. 전체 API 범위와 영역별 적합성은 Web API에서 확인하세요.
| 팩 |
전역 객체 |
WPT |
| 웹 플랫폼 |
URL, URLSearchParams, URLPattern, TextEncoder, TextDecoder, atob, btoa, structuredClone, performance, console, setTimeout / setInterval / queueMicrotask, reportError, self (globalThis의 별칭), DOMException |
100 % |
| Fetch |
fetch, Request, Response, Headers, Body 믹스인, AbortController, AbortSignal, Blob, File, FormData, EventTarget, Event, WHATWG Streams 전체(ReadableStream, WritableStream, TransformStream, 큐잉 전략, BYOB), CompressionStream / DecompressionStream (zlib + ext-brotli를 통한 선택적 brotli), navigator |
100 %¹ |
| 암호화 |
crypto.getRandomValues, crypto.randomUUID, SubtleCrypto 전체(digest, HMAC, AES-GCM/CBC/CTR, RSA-OAEP/PSS/PKCS1, ECDSA P-256/384/521, ECDH, HKDF, PBKDF2) |
100 % |
| WebSocket |
WebSocket (생성자 + RFC 6455 프레임 코덱, setWebSocketTransport를 통한 교체 가능한 전송) |
100 % |
| XHR |
XMLHttpRequest + XMLHttpRequestUpload + ProgressEvent (fetch 전송 계층 위에 구축되어 정책 훅 적용) |
100 % |
| 이벤트 루프 |
setTimeout, setInterval, clearTimeout, clearInterval, queueMicrotask, AsyncContext (Stage 3) |
해당 없음(오라클 테스트 완료) |
¹ 압축 픽스처의 허용 목록 하위 테스트는 제외합니다. ext-brotli가 필요한 brotli 사례와 SharedArrayBuffer 기반 입력을 전달하는 사례(tests/Wpt/WptTest.php의 EXPECTED_FAILURES)가 여기에 해당합니다.
가져온 나머지 Web Platform Tests는 모두 통과합니다. 적합성 항목별 결과는 Web API에서 확인하세요.
아직 구현되지 않은 항목
- 단일 에이전트를 넘어서는 SharedArrayBuffer 워커 의미론 — 실제 OS 스레드 간 멀티스레드 원자적 알림에는
pcntl가 필요하며 로드맵에 없습니다. 단일 에이전트 원자 연산은 작동합니다. - ICU 76+가 필요한 자소 클러스터를 사용하는
Intl.Segmenter — 호스트 PHP의 intl 확장 버전에 따라 달라집니다.
버전 관리
Phasis는 시맨틱 버저닝을 따릅니다. 버전 계열은 ECMAScript 사양 초안을 기준으로 합니다.
| Phasis 버전 |
사양 대상 |
Stage 3 제안 |
| 0.x |
ES2024 |
데코레이터, Temporal, 명시적 리소스 관리, 이터레이터 헬퍼, 집합 메서드 |
1.0으로 올리려면 ES2025 초안의 모든 Stage 4 제안을 구현하고 안정적인 Promise drain 의미론을 갖춰야 합니다.