# 일본 한달살이 19일차 (5월 16일)

아침은 간단하게 고기 먹었다.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1715819446393/38b98c5d-1b5a-49f2-9c55-3a2d2516f061.png align="center")

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1715819448749/6133576e-a266-4579-b513-a30a9169c042.png align="center")

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1715819450844/8b2893d3-8822-445d-83ac-7aa3d4694cab.png align="center")

점심은 적당히 먹었고, 저녁은 사온 카레에 고기추가해서 먹었다.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1715902492354/3c1ee594-bfe2-4039-8a11-09707ab57ea9.png align="center")

---

## 작업 일지

### SWC minifier 버그 수정 1

* [https://github.com/vercel/next.js/issues/46887](https://github.com/vercel/next.js/issues/46887)
    
* [https://github.com/swc-project/swc/pull/8956](https://github.com/swc-project/swc/pull/8956)
    

repro를 클론해서 디버깅용 로그를 여기저기 추가했다. 그러다가 `CSL.parseXml`이라는 함수에 `console.log`를 추가하니까 작동했다. 이것은 `CSL.parseXml` 압축이 잘못되었고, `console.log`로 인해 해당 함수 내의 변수 분석 결과가 바뀌면 버그가 사라진다는 의미이므로, 저 함수만 보면 된다.

저 함수만 떼와서 테스트 케이스를 만들었다.

* [플레이그라운드 링크](https://play.swc.rs/?version=1.5.7&code=H4sIAAAAAAAAA9VYbW%2FbNhD%2BXP8KVhsiybGlOMC6LZYdFEGGDeiaYSmwArZbyDJtK9PbSLpxkPi%2F7456l6jGbbEPEwxLIu%2BOd8%2B98Kge3ScxE%2BSTy8jV7RsyIY%2BHca9n93ukT24F86MNSVzGKSPrmJH3v78hfpTsBId5uwcclpx9HwbAut5FnvDjiBhcMJM89noELhT9MYk5EJyNy5F4eYerEW%2FrBytGowsyW5BDhYAL1%2FsbSGZIauVki3EqtVjrY%2BBz4a8fUmXzlUl2wSuIgH%2BLJ4EvDNu4vJizefSEP2bapnUX%2B5GhEc20GE0C16OGPZ29IItTx94MiDZ1qjPO%2FOVwaPUvh8OpnNXMcbEUKh1wUVtOstdJuHgI6B8SjmgXBOUk4msghY9IDYgf0AieQKQFTxuxHcOMI4fh6fS0aiZe%2FpoYPpmSs%2BYEXiBl5i9AnOZo5DR7HdfIDgppDjHK9cmQjMzPCs8eTgE27TnhWrQLl5Rp5OWEiIeExusCGtUayJKKt3jggy8AoR9NMpmgSZKRaOTpiTRpfkIaIAliz0Ualew0UAq3%2BOMWxaHDmPIp9TyClS5d2FIKs21yFYdLP6IkTmhke0HMKaEBDWkkuPQ%2FDRPxQARlIR9U%2BXhMxNYV8EcfyL0fBGRJIS85pysYY%2FFusyVezBj1RPBQZXR5JpPL9OCWOtxqTj7HQJuS4Qjuw6EqzGogj0zLj1Z0f7M2ILhSlwxHKpzT8N8ti0gp3fSD2Qa9tdLw3IRoAW%2Fa004%2FIlO6hnQ7QtlJW1sEonZUUehVHlv2syIy9zdSoBTatqzBWQsczHxkMy0vjjxXGOUUjp%2BbCqTy66CcOUCMQaChpTPIFQgDDUqXE%2B4CoS0K3yFopnT7UXCpfEJOTogKy1GO5f8bxq%2BoCoyKHYtQrXS1Q3PzWlEvXtFfRRhcR8IXPuXNHSwTAaO11fIN5sQNk7GWb2Mnmqmm%2BmcXi5JsrnXRbSpUkGTFeFAZd5rMxfZ48p0xOxv%2BvHgcDV4dzLG98QeVpiB0hbcdwK4X3tZNzC%2BsDzALfpRNxW%2BRMFJiCKEzc4z1jFF3JWmgsEUxC92ApPtIS1iGW9oWWGsWh1dbl10B2ii04f1Dt0V7Y%2BYO1%2F%2BRVa%2FaVm3p%2Fltt6Yi1DRWvBYhY7gSEGe47VXVRTVQSxy1pFDRLsw9zfa5NsB0yJ9g6aTCiLfpz7Wmu4yQ86qa9qaiAFSJs4tDR24THdTZ4hWldwFvpnYnVtxtdWGp5%2BymDMDwCGwnNgLii7k9Un9E9KPEn3VzvE0P%2FYPVlp6hDQUFquOkTY64BUClMpsQpfdXxVTet%2Fvd6oyNsoA5rVAhyvckl2F4U1dFA1umLSgupMumdu3nrhlTp65op2gcHfP2C2FNwdLNj%2FRL9mio1dPJcLm6Wd9Cm%2FAJBfANdEAQ0aKnUMDshHMrF8CAQgUEw3DKvToXu4A1ulOkWCZDJaGZEPZBL8iMjumQ4PrRzvVBd5c6DJl9UREMODJSEn9xgB5Rd0Vxwmy3u9uZWoDjDfwk7JqBqx5IEcu0jErF6mMPT3aIVS0DREdJ0L5jriXdwx%2FiBbhrOlb6g12kPfVRNg6SdQqw7kI4OJKPdjmWViRjbXXXVTSCOV%2B%2Fiq8wqAwyoapGeZPN%2BaWTOzhZWsuNbSddtKci8Rca%2FfLF9S%2B%2BfkZ4LLLDtkJyw2KOcfw6xAn%2B8MAskfK1mX3d0db8IG9o96CzAhto4yhbuJvdH0afJt0LqFKRi31aPpLQWdNcPkNvmqMXZccHT6DLVvi1pKq11xSbsibHh1W00pgUOduABFXH0RRY2qlMm67o4MGLvoJaM2rV3A6kgMrZUbKKXxpaudyb31yMF3s%2BxcmwVVvKMXF8oi%2Fc4MdriW%2Fx40P5WmNWm1UmeydeKotWsLD8ZKb5i5R%2B6vuGzELKhQcWBqtRDVQfyioH%2FeS2sBgIUrnHv0PsX9y%2Bt8jQUAAA%3D&config=H4sIAAAAAAAAA32VvY7bMAzH93uKwHPXduh26CHo0mcQFItylEqiIVK5GIe8%2B9Gy43zJ2WL9yD8pimS%2B3jab5kBt83vzJT%2Flo9eJIC3fckJDZH2SkwbaoKlNrufmx4UeaERWe4LlzIUeE7%2BTCLHDSGLAKUPB58mqYZ064KJKP2e5Bk4MKWr%2FF3wP6eI3Q49IcB%2BrCS46O9xm22LoExDdnMmpBMsBItNjroUl%2FLyPVc53iB50fEGUJuUiQzfl%2Bijcove6J1BHnSoqY6Y6OcJaiBFmBqP6hH2VR%2BPG4krMZ2pAG9WigQpyCVp2R6i5SSxxiyTXq9ynYAO73HWlQx684ah91lyJCafyJJJtRXWPjljZHGslnOBKDSY4F%2FfR01mVgHOKz34HdHHlTf4DSAW8Joo6QE23WFjppzVv%2B9LTRSsty0OFS3%2FXbhmhk6Iq52ylsmNlxiGrvWYCk1sYK9vW0pnxSvnIGVBgrfRKRZo%2BHbf7WlAeekBbAfK%2B2ta6agJqmcIVPg7EC7yVW3K9wWaLoHm%2FTmkIO%2FQvAgTgPZoXBvIUjOs4yZY49es8RwPSGmCqJpkKeF4CMgCMypdN%2BtQbMh6iqDqPu%2BuamA3Oy7YOOnbXeb9f0km2nMUUbjes5PJRUt1i%2BjOOytaBv1ZmEnibRZqAJhf1%2Bf9lbJBp6%2F9qrkaXNb7cvHH07%2BJZsj5%2FA5It6u2rBgAA)
    

아예

```javascript
return [][0];
```

이 생겨버린다. 디버깅을 해보니

```javascript
    var _obj = { children: [] };
    var _stack = [_obj.children];
    // 처리 코드

    return _obj.children[0];
```

에서 hoist\_props 패스가 `_obj` 를 `_obj_children` 으로 바꾸고 배열 inlining 과정에서 `var _stack = [_obj_children];` 를 고려하지 않는 게 문제였다. `[_obj_children]` 을 고려하게 바꾸니까 이슈가 해결됐다.

### SWC Minifier 버그 수정 2

* [https://github.com/vercel/next.js/issues/46887#issuecomment-2113264586](https://github.com/vercel/next.js/issues/46887#issuecomment-2113264586)
    
* [https://github.com/swc-project/swc/pull/8957](https://github.com/swc-project/swc/pull/8957)
    

`hoist_props` 패스가 `eval`의 존재 여부를 따지지 않고 변수를 추가해버려서 발생하는 문제였다.

### `swc_core` PR 업데이트

* [https://github.com/vercel/turbo/pull/8097](https://github.com/vercel/turbo/pull/8097)
    
* [https://github.com/vercel/next.js/pull/65450](https://github.com/vercel/next.js/pull/65450)
    

이슈 몇개 triage하다가 minifier PR들이 머지됐길래 `swc_core` 버전 업데이트 PR에 관련된 패치들을 추가했다.

### `@swc/core` 패키지 정리

* [https://github.com/swc-project/swc/pull/8625](https://github.com/swc-project/swc/pull/8625)
    

`swc` 메인 레포지토리를 제대로 된 모노레포로 만들기 위한 PR이다.

### 터보팩 Tree shaking PR

* [https://github.com/vercel/turbo/pull/7986](https://github.com/vercel/turbo/pull/7986)
    

```typescript
  function sendReady(): Promise<void> {
    const length = Buffer.from([0, 0, 0, 0]);
    return new Promise((resolve, reject) => {
      socket.write(length, (err) => {
        console.trace(`sendReady callback 1 ${err}`)
        process.stderr.write(`TURBOPACK_OUTPUT_D\n`);
        process.stdout.write(`TURBOPACK_OUTPUT_D\n`);

        console.trace(`sendReady callback 2 ${err}`)

        if (err != null) {
          reject(err);
        } else {
          resolve();
        console.trace(`sendReady callback done`)
        }
      });
    });
  }
```

디버깅을 위해서 로그를 추가하다가 `process.stdout.write` 이 아예 반환을 하지 않는다는 것을 알게 됐다.
