## 背景
[[🧊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