BOSON

보손 / JavaScript API 대응 명세

같은 JavaScript, 다른 실행 환경

V8이 JavaScript 언어를 실행하는 것과 브라우저 API가 존재하는 것은 별개입니다. 보손이 직접 제공할 함수, 모바일에서 달라지는 동작, 모바일 전용 함수와 초기 제외 항목을 분리합니다.

판정 원칙 · 같은 이름을 노출할 때에는 반환값뿐 아니라 오류, 취소, 이벤트 순서, 백그라운드 동작을 정의합니다. 그 계약을 맞출 수 없으면 웹 API를 흉내 내지 않고 @boson/platform의 명시적 API로 제공합니다.

01 · 언어 엔진 기능

V8에 포함되는 영역

앱에 포함한 V8 버전과 빌드 옵션을 고정한 뒤 확인합니다. 언어 기능의 존재만으로 타이머·네트워크·DOM이 생기지는 않습니다.

함수·객체웹과의 관계보손 계약상태
Promise Map SetECMAScript 언어 객체선택한 V8 빌드에서 제공. 비동기 작업을 돌릴 마이크로태스크 체크포인트는 보손 호스트가 정합니다.엔진 검증
JSON ArrayBuffer TypedArray언어 수준 데이터 기능JS 객체와 Rust·C++ 경계를 넘을 때 복사·소유권·크기 제한은 별도 계약으로 둡니다.엔진 검증
Intl Date언어 기능이지만 로케일·시간대 데이터에 영향V8/ICU 빌드, OS 시간대와 언어 데이터를 고정해 실제 결과를 비교합니다.조건 검증
globalThisECMAScript 전역 객체 참조전역 객체 자체는 언어 기능입니다. 여기에 어떤 웹식 API를 설치할지는 보손 호스트 계약으로 구분합니다.엔진 검증

02 · 보손이 제공할 API

V8 기본 기능이 아님

웹과 같은 이름을 목표로 하지만 구현은 보손 호스트에 둡니다. 첫 수직 구현에 필요한 최소 기능부터 제공합니다.

함수·객체웹에서의 용도보손 구현·검증 조건첫 목표
setTimeout clearTimeout지연 작업·취소호스트 스케줄러와 JS 이벤트 루프에 연결. 취소 후 콜백 수명과 앱 중단 시 동작을 검증합니다.수직 구현
queueMicrotask현재 작업 뒤의 미세 작업V8 마이크로태스크 큐와 호스트 콜백 경계의 실행 순서를 고정합니다.수직 구현
URL URLSearchParams주소 파싱·조합표준 형태를 목표로 하며 상대 URL의 기준 주소를 모바일 앱에서 명시합니다.도구 확장
TextEncoder TextDecoder문자열·바이트 변환지원 인코딩·오류 동작을 웹과 비교해 호스트 또는 폴리필로 제공합니다.도구 확장
AbortController비동기 작업 취소 신호fetch와 다른 호스트 호출이 취소를 어느 시점에 반영하는지 명시합니다.도구 확장
console로그·오류 조사출력 대상, 오류 스택, 릴리스 로그 정책은 호스트가 정합니다.수직 구현
Blob File FormData바이너리 데이터·업로드메모리 한도, 파일 핸들 수명, fetch 본문·스트림 연동을 정한 뒤 제공하며 초기 존재를 가정하지 않습니다.후속 단계
crypto.getRandomValues() crypto.randomUUID()안전한 난수·식별자OS 난수원을 연결하고 실패 및 백그라운드 동작을 검증합니다. V8 언어 엔진만으로 자동 제공되지 않습니다.도구 확장

03 · 이름은 같고 동작은 다름

호환성 차이를 공개

같은 소스가 컴파일되어도 브라우저의 출처·문서·탭 수명주기와 모바일 앱의 권한·백그라운드 규칙은 다릅니다.

함수·객체차이의 원인보손에서 정할 계약첫 목표
fetch()브라우저의 출처·CORS·쿠키·캐시와 앱 네트워크 권한·저장소가 다릅니다.요청/응답 형식은 웹에 맞추되 상대 URL, 쿠키, 캐시, 자격 증명, 취소, 오류를 별도 표로 공개합니다. CORS와 동일하다고 주장하지 않습니다.도구 확장
WebSocket EventSource연결 유지·재연결이 앱 백그라운드 정책과 충돌할 수 있습니다.초기에는 제공하지 않습니다. 연결 상태, 인증, 중단·재개, 배터리 비용을 명세한 뒤 도입합니다.후속 단계
requestAnimationFrame()브라우저 문서 프레임 대신 모바일 GPU 표면의 프레임을 사용합니다.표시 주기, 콜백 시각, 화면이 가려지거나 앱이 백그라운드일 때의 중단 규칙을 정합니다.렌더러
setInterval()앱 수명주기와 절전 정책에 따라 정지·지연될 수 있습니다.백그라운드에서 실행을 보장하지 않으며 재개 시 누락된 틱을 어떻게 처리할지 정의합니다.도구 확장
performance.now()브라우저의 시간 원점과 앱 프로세스 수명이 다릅니다.단조 시계의 원점·정밀도·앱 재개 후 연속성을 기록합니다. 벤치마크에는 플랫폼 계측도 함께 씁니다.계측
스토리지 API브라우저 출처 단위 저장과 앱 설치·사용자 데이터 수명이 다릅니다.localStorage 전역을 바로 복제하지 않고 비동기 저장소 계약, 용량, 암호화와 삭제 정책을 설계합니다.도구 확장

04 · 모바일 전용 API

명시적 모듈 제안

아래 이름은 @boson/platform의 API 형태 제안입니다. 웹 빌드에서는 지원 여부를 확인하는 대체 구현 또는 명시적 실패를 제공합니다. 실제 서명은 구현 전에 확정합니다.

제안 함수필요한 이유계약에 포함할 조건첫 목표
getSafeAreaInsets()노치·상태 막대·제스처 영역화면 회전과 창 크기 변경 시 값 갱신, CSS 안전 영역과의 관계실사용 UI
onAppStateChange()전경·백그라운드·복귀 처리구독 해제, 이벤트 순서, 일시 중단된 JS 작업의 재개수직 구현+
onBackPress()Android 시스템 뒤로 가기라우터에 이전 방문 항목이 있는지 먼저 확인하고, 루트 화면의 동작은 플랫폼 정책으로 명시합니다. iOS·웹은 각각의 뒤로 가기 입력에 연결합니다.실사용 UI
dismissKeyboard()모바일 소프트 키보드 제어IME 조합 중 취소·확정, 포커스 이동과 이벤트 순서실사용 UI
requestPermission()카메라·사진·위치 등 OS 권한권한 종류, 거절·재요청·설정 이동, 플랫폼별 상태 차이플랫폼 기능
hapticFeedback()진동·촉각 반응기기 지원 여부와 강도 차이, 무음/절전 상태플랫폼 기능
openExternalURL()앱 밖의 링크·딥링크 열기허용 스킴, 실패 결과, 앱 복귀와 보안 정책실사용 UI

05 · 초기에는 없는 API

영구 불가 판정은 아님

이름만 있는 빈 함수를 만들지 않습니다. 현재 구현 목표에서 빠진 항목은 빌드 진단 또는 실행 시 명시적 오류로 알립니다.

함수·객체초기 제외 이유앱에서의 대안후속 판단
document.querySelector() innerHTML보손 모바일에는 브라우저 DOM이 없습니다.상태 기반 UI 갱신과 향후 보손 노드 핸들 API별도 계약
window.open() location history탭·문서 탐색과 모바일 앱 화면 이동의 의미가 다릅니다.선택형 보손 라우터의 위치·push·replace·back 계약과 openExternalURL()을 사용합니다. 모바일에 브라우저 History 객체 전체를 제공하지 않습니다.별도 계약
navigator.serviceWorker브라우저의 서비스 워커·출처·캐시 수명주기가 없습니다.보손의 앱 업데이트·백그라운드 작업 API를 따로 설계후속 검토
navigator.mediaDevices브라우저 미디어 권한과 앱 OS 권한 계약이 다릅니다.명시적 카메라·마이크 플랫폼 컴포넌트플랫폼 기능
Node.js fs process Buffer앱 런타임은 Node.js가 아닙니다.파일 선택·저장소 등 보손 플랫폼 API후속 검토
navigator.gpu / 브라우저 WebGPU보손 내부 GPU 렌더러가 WebGPU의 앱 공개 API를 뜻하지 않습니다.공개 GPU API는 독립 제안으로 검토후속 검토
Worker SharedWorker BroadcastChannel분리된 JS 실행 문맥과 메시지·전송 규약이 아직 없습니다.메인 JS 실행 문맥에만 의존하는 초기 범위로 한정하고 병렬 JS는 별도 설계합니다.후속 검토
canvas OffscreenCanvas WebGL내부 GPU 표면만으로 웹의 Canvas 객체·명령 모델이 생기지 않습니다.일반 HTML 태그 또는 전역 API로 노출하지 않고 별도 그래픽 API를 검토합니다.후속 검토

호환성 표의 단위

함수마다 웹·Android·iOS의 존재 여부, 입력과 반환값, 오류, 취소, 권한, 백그라운드 동작을 기록합니다. fetch()처럼 같은 이름을 쓸 때에는 차이를 문서화하고, 동작이 크게 다르면 플랫폼 API로 분리합니다.

현재 검증 상태

기존 V8 동적 트리 PoC는 JS 호출과 이벤트 연결을 확인한 자료입니다. 이 문서의 fetch(), 타이머, 저장소, 모바일 전용 함수가 실제 앱에서 동작한다는 증거는 아닙니다. 먼저 작은 카운터 앱에 필요한 타이머·마이크로태스크 계약을 구현합니다. 기준 자료: V8 임베딩 문서, DOM 표준, Fetch 표준.