TL;DR

  • fx 40.0.0은 뷰어에서 쿼리를 실시간으로 작성하고 자동 완성할 수 있으며, XML·HTML·EDN·MAML 입력과 다양한 뷰어 기능을 제공하는 대규모 릴리스임.
  • 쿼리 결과를 입력 중에 미리 볼 수 있고, 데이터의 키를 탭으로 자동 완성하며, 쿼리 기록과 취소 기능도 제공함.
  • Bubble Tea v2 기반으로 전환하고 SSH 복사, 터미널 제목 표시, 붙여넣기와 색상 처리 등을 개선함.
  • Vim 스타일 명령, 재귀 키 정렬·키 삭제·종료 함수와 괄호 이동·파일 다시 불러오기·미리보기 검색 기능을 제공함.
  • 안정성 문제를 수정하고 일부 기존 기능을 제거했으며, 빈 입력에서 비정상 종료 코드를 반환하고 비 JSON 파일 덮어쓰기를 거부함.

대화형 쿼리

  • 뷰어에서 .을 눌러 쿼리 입력을 시작하며, 입력하는 동안 결과가 매번 갱신되는 실시간 미리보기를 제공함.
  • 데이터의 키를 탭으로 자동 완성하며 람다 안에서도 작동함. 배열에서는 모든 요소와 문서를 탐색하고, 배열의 .items. 입력을 .items[].key 형태로 완성함.
  • 명령줄과 같은 fx 문법에서 여러 인수를 사용할 수 있으며, .users ?.active @.name은 필터링 후 매핑하는 예시임.
  • 쿼리 입력창에서 자바스크립트(JavaScript) 구문 강조를 지원함.
  • 위쪽·아래쪽 화살표로 이전 쿼리를 탐색하며, 작성 중이던 초안도 보존함.
  • Esc를 누르면 쿼리를 취소하고 원래 문서로 돌아감.
  • 끝나지 않는 쿼리는 취소할 수 있고, 스트리밍 문서는 쿼리 실행 중에도 계속 들어옴.
  • 같은 자동 완성 엔진이 셸 자동 완성에도 적용되어, fx data.json .us<Tab>이 터미널 UI(TUI)와 셸에서 동일하게 작동함.

새로운 입력 형식: XML, HTML, EDN, MAML

  • XML, HTML, EDN, MAML 파일을 각각 .rss.channel.item[].title, .html.body, .paths, .server.port 같은 경로 쿼리로 탐색할 수 있음.
  • XML 입력 옵션은 --xml, .xml, .svg이며, 속성은 @attr, 텍스트는 #text로 변환하고 반복되는 자식 요소는 배열로 변환함. 익숙한 xmltodict 매핑 방식이며, 네임스페이스 접두사는 원래 표기를 유지하고 비 UTF-8 문자 집합도 처리함. 루트 요소가 여러 개인 파일은 JSON 문서 스트림으로 변환함.
  • HTML 입력 옵션은 --html, .html, .htm이며, 실제 웹 페이지의 잘못된 마크업도 불러올 수 있도록 전체 HTML5 트리로 파싱함. <meta charset> 설정도 반영함.
  • EDN 입력 옵션은 --edn, .edn이며, 키워드에서 콜론을 제거하므로 :paths를 .paths로 쿼리함. 키 순서와 큰 정수를 보존함.
  • MAML 입력 옵션은 --maml, .maml이며, 키 순서와 숫자의 정확한 텍스트를 보존함. 쿼리와 fx의 npm 버전에서 MAML.parse 및 MAML.stringify도 사용할 수 있음.

Vim 스타일 명령

  • :를 눌러 명령줄을 엶.
  • :w [file]은 현재 뷰 또는 쿼리 결과를 파일에 기록함.
  • :wq는 기록한 뒤 종료함.
  • :w !cmd는 JSON을 셸 명령으로 전달하며, :w !less, :w !vim -, :w !code -, :w !pbcopy 등을 사용할 수 있음.
  • :q는 종료 명령임.
  • :<n>은 지정한 줄 번호로 이동함.

Bubble Tea v2

  • fx가 Bubble Tea v2에서 실행됨.
  • SSH를 통한 복사에서 OSC 52를 사용하고, 사용할 수 없으면 로컬 클립보드 도구로 대체함. 이 변경으로 #283과 #413을 수정함.
  • 터미널 창 제목에 파일 이름을 표시함.
  • 쿼리 및 검색 입력창에 붙여넣을 수 있음.
  • 출력을 파이프로 보낼 때 색상을 올바르게 다운샘플링함.

뷰어 개선

  • %는 일치하는 괄호로 이동함.
  • r은 파일을 다시 불러옴.
  • Ctrl-E와 Ctrl-Y는 뷰를 한 줄씩 스크롤함.
  • 미리보기 창에서 강조 표시와 탐색 키를 사용해 검색할 수 있음.
  • 객체와 배열의 크기를 키 옆에 표시함.
  • 도움말 화면을 범주별로 구성함.
  • --no-tui는 출력을 표시하고 뷰어를 열지 않음.

새로운 함수

  • sortKeys는 객체 키를 재귀적으로 정렬함.
  • del(key)는 객체에서 키를 제거하거나 배열에서 인덱스를 제거함. 예를 들어 .users map(del('password'))를 사용할 수 있음.
  • exit(code)는 지정한 종료 코드를 반환하며 fx를 종료함.

안정성

  • 자바스크립트 엔진이 더 이상 fx를 충돌시키지 않음. 쿼리 안에서 발생한 패닉은 오류로 보고하며, 시간 제한은 미리보기에만 적용함.
  • 삭제된 노드나 실행 중인 검색과 관련된 문제를 포함해 뷰어가 충돌하거나 멈출 수 있는 여러 문제를 수정함.
  • 표준 입력을 읽은 뒤 Windows TTY 원시 모드를 복원함.
  • UTF-8 BOM을 처리함.
  • $HOME이 설정되지 않은 환경에서도 작동함.
  • 비 TTY 환경에서 파일 인수를 올바르게 감지함.
  • 미리보기와 출력에서 문자열 이스케이프를 디코딩함.

숨겨진 던전

  • fx --dungeon으로 JSON 뷰어 안에 숨겨진 로그라이크 던전을 실행할 수 있음.

호환성을 깨는 변경

  • Esc는 더 이상 종료 키가 아니며, q 또는 Ctrl-C를 사용해야 함.
  • 편집기에서 열던 v 키를 제거함. :w !vim - 또는 표준 입력을 읽는 다른 편집기를 사용할 수 있음.
  • dig 기능을 제거했으며, 대화형 쿼리와 탭 자동 완성으로 대체함.
  • Game of Life 기능을 제거하고 던전으로 대체함.
  • 입력이 비어 있으면 fx가 0이 아닌 종료 상태를 반환함.
  • JSON이 아닌 입력 파일에 대한 저장을 거부하므로 YAML 또는 XML 파일을 JSON으로 덮어쓰지 않음.

문서와 변경 사항

  • 전체 문서: fx.wtf
  • 전체 변경 내역: 39.2.0...40.0.0
  • 릴리스 버전은 40.0.0이며, 게시 시각은 10월 5일 16:01임.