## 背景 [[🧊Obsidian Tempura Studio]]を使って、[[Templaterスクリプト]]の開発が快適になった。ただ、課題が1つ残っている。[[🧊Obsidian Tempura Studio]]のシステム自体にバージョンアップが発生したとき、今のままでは腰が重い。(フレームワークのすり替え作業くらいの手間) ## 対策 [[🧊Obsidian Tempura Studio]]をインストールして使えるようにする。 - ユーザーに`npm i obsidian-tempura-studio` 的なことをしてもらう - ユーザーは以下を用意する - `src`ディレクトリとその配下 - `tempura.config`を用意する - ユーザーは `npx tempura start`的なコマンドを実行する ## [[🧊Obsidian Tempura]]に内蔵してしまった方がいいのでは? たしかに。可能ならその方がよさそう。やってみる。 ## ライブラリでのnpmコマンドはライブラリのscriptsを呼ばない ライブラリをインストールしたプロジェクトの`package.json`に記載されたnpm scriptsを利用しようとする。それでは[[npm-watch]]を使うのは厳しそう。対策は... - package.jsonに頼らず、同様の効果が見込める方法 (CLIコマンドなど) を考える - ライブラリの[[package.json]]を利用する方法がないか調べる ## [[Moment.js]]はテストコードで詰んだ... ```ts import { expect, test } from "bun:test"; import { getDatesInRange } from "./dates"; import moment, { Moment } from "moment"; test.each([ [ moment("2023-01-01"), moment("2023-01-02"), [moment("2023-01-01"), moment("2023-01-02")], ], [ moment("2023-01-01"), moment("2023-01-03"), [moment("2023-01-01"), moment("2023-01-02"), moment("2023-01-03")], ], [ moment("2022-12-31"), moment("2023-01-01"), [moment("2022-12-31"), moment("2023-01-01")], ], ])( `getDatesInRange("%s")`, ( begin: Moment, end: Moment, expected: ReturnType<typeof getDatesInRange> ) => { expect( getDatesInRange(begin, end).map((x) => x.toISOString()) ).toStrictEqual(expected.map((x) => x.toISOString())); } ); ``` ## TODO - [x] 移植作業 - [x] `build.mjs` - [x] `build.mjs` -> `dev.mjs` - [x] 依存モジュールインストール - [x] bin配下でバイナリの仕組みを作る - [x] サンプルで動作確認 - [x] NG - [x] Chokidarを使って実装しなおす - [x] `bun remove npm-watch` - [x] startup - [x] `config.json` - [x] `global.d.ts` - [x] global.d.tsは暗黙的にいける? - [x] 一度global.d.tsを開かなければアクティブにならない - [x] [[tsconfig.json]]があった方がよさそう - [x] node18くらいにしておくか... - [x] `dist/fryTempura.js` の配布 - [x] libをビルドしないとpushできない仕組みをつくる - [[📕huskyでプッシュ前に自動でTypeScriptの型チェックとテスト実行]] - [[ファイルに変更があった場合のみ失敗 (Git)|ファイルに変更があった場合のみ失敗]]させる - [x] READMEの修正 - [-] 監視したままターミナル終了でディレクトリを掴んでしまう問題 - 下調べ - [[Node.jsでプロセス終了時の処理を定義]]してみる - 状況 - `Ctrl + C`でちゃんと終了した場合は問題ない - process killも問題ない - **ターミナルを消したときだけが問題** - [[SIGHUP]]のとき - 結局微妙だった - [[Vim]]のターミナルで開いてそれをそのまま閉じたときだけだからいいかな... - [x] 最終動作確認 - [x] Windows - [x] init - [x] build - [x] watch - [x] Obsidian - [x] Linux - [x] init - [x] build - [x] watch - [x] Obsidian - [x] `"type": "module",` - [-] `recommended`でいいのでは - [[Electron]] v25が[[Node.js]] v18だったので18でいい - [-] user scriptもwatchしたい(fryTempura) - ユーザーが`node_modules`の中を監視する必要があり、それはやりすぎ - [x] srcを指定できるようにする - [x] 複数環境で同じスクリプトを使いたいとき、制御ができると便利 - [x] 複数指定できるとなおよい - [x] configを`bin/tempura`で読み込む - [ ] Obsidian Publish URLコピーの残課題 - [ ] hot reloadでtestに最終行が加わる問題 - [ ] publish URLの取得が遅い問題 - 再現しない... #2023/11/09