logo
/
🏆dirtreeist
2022-09-05

Why

たまに素の状態からディレクトリ構成を考える時があるけど、記号手打ちするの馬鹿らしい
検索したけど意外と誰も作ってない?
ディレクトリ図構成ビルダー

Task

  • 名前をつける
    • dirTree
      • latexの構文であるし、他のアプリでもある
    • dirTreeist
      • いいんじゃない?安直にbuilderとかじゃないのが良い
  • レポジトリの作成
  • テストの実装
  • Readmeの実%%%%装
  • 変換ロジック
    • ディレクトリをどう判断する?
      • 判断とかなしに自分で/をつけてもらう
        • まあこれが確実かな
      • 子を持ってるのをディレクトリとする
        • 自然ではあるけど、子がないディレクトリもあるし
    • markdownlistからdirtreeへの変換ロジック
      • これは普通に既存のモジュール使っていいと思う
        • markdown->html->dirtree?
        • いや、outlinerの作成のときのほぼおんなじロジック作ったからそれの簡易版で良い
      • remarkを使おうとおもう
        • markdownの例外とか考えるより既存に乗っかる
        • esmとnodeのあれでjestが動かない…
    • dirtreeからoutputへの変換ロジック
  • moduleとして公開するための方法を検索する 2022-09-07
    • 参考
    • npmユーザーの作成
    • パッケージの初期化
      • 初期化はしてあったので
      • nameをネームスペース付きにする
      • versionを0.1.0にする
        • メジャーバージョンは0のときは破壊的変更あっても挙げなくても良いというルール
    • サンプルモジュールの実装
    • 公開
      • npm publish --access=public
    • インストール
    • 調べたいこと
      • moduleの仕組み
      • tsとして公開するには?
        • jsにコンパイルはするけど、型定義を一緒に出力することで対応する
  • オプション一覧の作成 2022-09-06
  • アウトプット例の作成
  • ページとして公開
  • cliの実装
  • esmの拡張子をビルド時に自動でつくようにしたい
    • いまはimport from 'hoge.js'と明示的にかいている
    • ESMの使用上は正しいんだけど、、、

Problem

  • 2022-09-10
    • nextでdirtreeist読み込むとmdastでエラーになる v0.2.1→でかいけつ
    • next/devなら動くけど、next/buildだと動かない
      • 拡張子がついてないかっらぽい
      • 手動でつけた.jsら動いた
    • テストすら動かなくなってしまった... [completion:: 2024-04-22]
      • package.jsonexportsを消せば動くけどなんでvitestがそれを読んでるの?
  • ESMとして動いてるのかCJSとして動いてるのかわからん [completion:: 2024-04-22]

How

  • アウトライナー的に書けばいい感じにツリー表示される
  • 記号形式を選べる
  • /入力でディレクトリ扱い
  • outlinerObject -> toDirectoryTreeStringで出来る
  • treeコマンドで表示とかではない。
    • これは既存にあるやつを書き起こやる

Info

名前

🏆dirtreeist

変換フロー

構造

type DirNode = {
  name:string,
	children:DirNode[]
}

type DirTree = DirNode[]

オプション : default

treeType : 1

1
├─
│
└─
2
┣━
┃
┗━
3
|
|-
+-

emptyLineBeforeUpperHierarchy : false

(true)
├──components
│   ├──App.tsx
│   └──App.css
│
├──config.json
└──utils
    └──converter.ts

spaceBeforeName : false

(true)
├── components
│   ├── App.tsx
│   └── App.css
│
├── config.json
└── utils
    └── converter.ts

spaceSize : 2

(4)
├──── components
│    ├── App.tsx
│    └── App.css
│
├──── config.json
└──── utils
     └── converter.ts

公開手順

バージョンを上げる

yarn version --major
# v1.0.0 から v2.0.0 へ変更

yarn version --minor
# v1.0.0 から v1.1.0 へ変更

yarn version --patch
# v1.0.0 から v1.0.1 へ変更

ビルド

publish

CLI

dirTreeist <inputFile> [...options]

オプション

-t, --treeType ['normal'|'bold'|'ascii']
-e, --empty [boolean]
-space, --spaceBeforeName [boolean]
-size, --spaceSize [number]

機能

  • 通常のTSModuleとして使用
  • CLIからオプションを渡して実行

Idea

Memo

  • parserとoutlinerは別物か?
  • test + readme駆動開発めちゃめちゃ心地よい
    • readmeは人間が見やすいユースケースの信頼できるソースだし、testはinput/outputのみに集中できるので設計の間違いに気づきやすい
    • 唯一の難点はreadmeとtestを同時に修正することがあるくらい
      • ソースまで同時にいじるよりはまし
  • viteはフロントエンドなので、ほんとうの意味のpure tsは実行できない?

アップデート(読み込み側)

yarn upgrade @k4a_l/[email protected]
npm install @k4a_l/[email protected]

ESMとCJS

  • 基本
    • cjsを読み込むにはexport、esmはimport
    • cjsからはdefault exportしかできない
      • 疑似ネームドにするなら、読み込んだ後に分割代入し直す
  • ビルド
  • 総じてよくわからない
    • パッケージとして公開して別リポジトリから呼び出せるようにはなったけど、開発リポジトリ内で動かせない
    • ts-node-devだと色々怒られるし、nodemonもだめ。
    • もうわけわからん

Log

2022-09-05 作成
2022-09-09 一旦完成
2022-09-10 npmに公開して3日なのにweekly downloadが609もある。多分リリースされた最初はいろんなところからクロールされてるんだと思う。バージョンごとのダンロード数が40くらいで同じなので(バージョンごとの公開スパンは結構違うのに)。